Angular之作用域

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angular之作用域相关的知识,希望对你有一定的参考价值。

一、$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对象的生命周期

  1. 创建:在创建控制器或指令时,AngularJS会用$injector创建一个新的作用域,并在这个新的控制器或指令运行时将作用域传递进去。
  2. 链接:当Angular开始运行时,所有$scope对象都会附加或者连接到视图中。所有创建$scope对象的函数也会将自身附加到视图中,这些作用域将会注册当Angular应用上下文发生变化时需要运行的函数。(这些函数被称作$watch函数,Angular通过这些函数知道何时启动事件循环)
  3. 更新:当事件循环运行时,它通常执行在顶层$scope对象上(即$rootScope),每个子作用域都执行自己的脏值检测。如果检测到任意变化,$scope对象就会触发指定的回调函数。
  4. 销毁:当一个$scope在视图中不在需要时,这个作用域将会清理和自己销毁(Angular执行销毁),自己也可以根据$destory()来清理此作用域。

 

以上是关于Angular之作用域的主要内容,如果未能解决你的问题,请参考以下文章

angular js权威指南笔记三--向指令中传递数据

JS 作用域及作用域链

JS 作用域及作用域链

angular自定义指令scope属性学习笔记

深入作用域之静态作用域与动态作用域

作用域是什么?