当前位置: 首页 > Web前端 > HTML5

angular中的作用域和继承

时间:2023-04-05 15:19:04 HTML5

在一些使用angular框架的大型项目中,似乎有很多控制器,每个控制器都有自己的$scope.$rootscope$rootScope顶级作用域,也叫根作用域,类似对于窗口,可以在任何子范围内访问窗口的属性。$rootScope是所有控制器进行数据通信的中间域,即$rootScope中的数据可以通过每个控制器中的$rootScope.xxx获取。$scope(1)$scope的作用是在view和controller之间建立桥梁。基于作用域的视图会在数据修改时立即更新$scope,当同一个$scope发生变化时会立即重新渲染视图。每一个controller控制器对应一个$scope。通过为其属性赋值,可以将数据传递给模板渲染。(2)生命周期创建:在创建控制器或指令时,AngularJS会用$injector创建一个新的作用域,并在这个新创建的控制器或指令运行时将作用域传入。链接:当Angular开始运行时,所有$scope对象都附加或链接到视图。创建$scope对象的所有函数也将它们自己附加到视图。这些范围将注册需要在Angular应用程序上下文更改时运行的函数。这些函数称为$watch函数,Angular使用这些函数来了解何时开始事件循环。更新:当事件循环运行时,它通常在顶级$scope对象(称为$rootScope)上执行,每个子作用域执行自己的脏值检测。每个监视功能都会检查更改。如果检测到任何更改,$scope对象将触发指定的回调函数。销毁:当视图中不再需要$scope时,该范围将清理并销毁自身。虽然你永远不需要清理范围(因为Angular会为你处理),但知道谁创建了范围仍然很有用,因为你可以在这个$scope上使用名为$destory()的方法来清理范围。.Prototypeinheritancescope就是AngularJS中的作用域(其实就是存放数据的地方),和JavaScript的原型链很像。搜索时,先寻找自己的范围。如果没有找到,则向上搜索作用域链,直到到达根作用域rootScope。{{name}}{{name}}

首先,子控制器在其自己的范围。如果找不到,则应将其添加到父控制器。在子控制器中如何修改父控制器中$scope的值可以看如下:$scope.$parent.name="son";子控制器中的$scope.$parent表示父控制器中的$scope,然后修改它的值。4.$new$scope.$new(隔离,父级);用于定义作用域的子作用域1)参数:isolated,是否隔离。如果值为true,则此作用域将不会从父作用域继承原型。作用域是独立的,在这里看不到父作用域的属性。如果值为false,则继承自parent(父scope的所有成员都可以访问),默认为false!parent用于指定创建的子作用域的父作用域。如果没有这个参数,父作用域就是调用当前$new方法的那个作用域$scopevarmyController=function($scope){$scope.data="hello!"varscope1=$scope.$new(false,$scope);控制台日志(scope1.data);//你好!scope1继承了$scope,所以可以访问数据varscope2=$scope.$new(true,$scope);console.log(scope2.data);//undefined第一个参数为true,表示是隔离的,不能继承,我自己没有,所以是undefined}myController.$injector=["$scope"];angular.module("myApp",[]).controller("myController",myController)