一、$rootScope和$scope
AngularJS在启动并生成视图时,会将根ng-app元素同$rootScope进行绑定。$rootScope是所有$scope对象的最上层。
$rootScope是Angular中接近全局作用域的对象。$scope在Angular中充当数据模型,在视图与控制器之间充当桥梁的作用。
以$rootScope的方式:
<!doctype html> <html> <head> <script src="http://code.angularjs.org/angular-1.0.1.min.js"></script> </head> <body> <div ng-app="myApp"> <h1>Hello {{ name }}!</h1> </div> <script type="text/javascript" src="controller.js"></script> </body> </html> controller.js: angular.module("myApp",[]).run(function($rootScope){ $rootScope.name=‘word‘; })
以$scope的方式:
<div ng-app="myApp"> <div ng-controller="mycontroler"> <h1>Hello {{ name }}!</h1> </div> </div> <script type="text/javascript" src="controller.js"></script> controller.js: angular.module("myApp",[]).controller(‘mycontroler‘,function($scope){ $scope.name=‘scope word‘; })
注意:ng-controller指令附加到一个DOM元素上,会为这个DOM元素创建一个新的$scope对象,并将它嵌入到$rootScope对象中.
二、$scope对象的生命周期
- 创建:在创建控制器或指令时,AngularJS会用$injector创建一个新的作用域,并在这个新的控制器或指令运行时将作用域传递进去。
- 链接:当Angular开始运行时,所有$scope对象都会附加或者连接到视图中。所有创建$scope对象的函数也会将自身附加到视图中,这些作用域将会注册当Angular应用上下文发生变化时需要运行的函数。(这些函数被称作$watch函数,Angular通过这些函数知道何时启动事件循环)
- 更新:当事件循环运行时,它通常执行在顶层$scope对象上(即$rootScope),每个子作用域都执行自己的脏值检测。如果检测到任意变化,$scope对象就会触发指定的回调函数。
- 销毁:当一个$scope在视图中不在需要时,这个作用域将会清理和自己销毁(Angular执行销毁),自己也可以根据$destory()来清理此作用域。
时间: 2024-10-11 23:09:11