scope的生命周期
当Angular关心的事件发生在浏览器中时,比如用户在通过ng-model
属性监控的输入字段中输入,或者带有ng-click
属性的按钮被点击时,Angular的事件循环都会启动。这个事件将在Angular执行上下文中处理。
更多关于Angular执行上下文的信息请参考第23章。
当事件被处理时,$scope
就会对表达式求值。此时事件循环会启动,并且应用程序会检查每个监控。
作用域的表达式就是赋值给作用域对象的变量。当我们给上面提到的作用域中的
name
变量赋值,比如$scope.name="Ari"
,实际上是设置了一个表达式,即使这个值只是一个简单的字符串。
$scope
对象的生命周期处理有四个不同阶段。
创建
在创建控制器或指令时,AngularJS会用$injector
创建一个新的作用域,并在这个新建的控制器或指令运行时将作用域传递进去。
链接
当Angular开始运行时,所有的$scope
对象都会附加或者链接到视图中。所有创建$scope
对象的函数也会将自身附加到视图中。这些作用域将会注册当Angular应用上下文中发生变化时需要运行的函数。
这些函数被称为
$watch
函数,Angular通过这些函数获知何时启动事件循环。
更新
当事件循环运行时,它通常执行在顶层$scope
对象上(被称作$rootScope
),每个子作用域都执行自己的脏值检测。每个监控函数都会检查变化。如果检测到任意变化,$scope
对象就会触发指定的回调函数。
销毁
当一个$scope
在视图中不再需要时,这个作用域将会清理和销毁自己。
尽管永远不会需要清理作用域(因为Angular会为你处理),但是知道是谁创建了这个作用域还是有用的,因为你可以使用这个$scope
上叫做$destory()
的方法来清理这个作用域。