Angular 中得 scope 做用域梳理

    $scope 的使用贯穿整个 Angular App 应用,它与数据模型相关联,同时也是表达式执行的上下文.有了 $scope 就在视图和控制器之间创建了一个通道,基于做用域视图在修改数据时会马上更新 $scope,一样的 $scope 发生改变时也会马上从新渲染视图.app

    有了 $scope 这样一个桥梁,应用的业务代码能够都在 controller 中,而数据都存放在controller 的 $scope 中.
框架

  $rootScope

    Angular 应用启动并生成视图时,会将根 ng-app 元素与 $rootScope 进行绑定.$rootScope 是全部 $scope 的最上层对象,能够理解为一个 Angular 应用中得全局做用域对象,因此为它附加太多逻辑或者变量并非一个好主意,和污染 Javascript 全局做用域是同样的.
函数

  $scope 的做用

    $scope 对象在 Angular 中充当数据模型的做用,也就是通常 MVC 框架中 Model 得角色.但又不彻底与一般意义上的数据模型同样,由于 $scope 并不处理和操做数据,它只是创建了视图和 HTML 之间的桥梁,让视图和 Controller 之间能够友好的通信.
spa

    再进一步系统的划分它的做用和功能:
对象

  1. 提供了观察者能够监听数据模型的变化生命周期

  2. 能够将数据模型的变化通知给整个 App事件

  3. 能够进行嵌套,隔离业务功能和数据ip

  4. 给表达式提供上下文执行环境作用域

    在 Javascript 中建立一个新的执行上下文,实际就是用函数建立了一个新的本地上下文,在 Angular 中当为子 DOM 元素建立新的做用域时,其实就是为子 DOM 元素建立了一个新的执行上下文.
input

 $scope 生命周期

    Angular 中也有一个'事件'的概念,好比当一个绑定了 ng-model 的 input 值发生变化时,或者一个 ng-click 的 button 被点击时,Angular 的事件循环就会启动.事件循环是 Angular 中很是很是核心的一个概念,由于不是本文主旨因此很少说,感兴趣的能够本身看看资料.这里事件就在 Angular 执行上下文中处理,$scope 就会对定义的表达式求值.此时事件循环被启动, Angular 会监控应用程序内全部对象,脏值检查循环也会启动. 

    $scope 的生命周期有4个阶段:

  1. 建立

    控制器或者指令建立时, Angular 会使用 $injector 建立一个新的做用域,而后在控制器或指令运行时,将做用域传递进去.

  2. 连接

    Angular 启动后会将全部 $scope 对象附加或者说连接到视图上,全部建立 $scope 对象的函数也会被附加到视图上.这些做用域将会注册当 Angular 上下文发生变化时须要运行的函数.也就是 $watch 函数, Angular 经过这些函数或者什么时候开始事件循环.

  3. 更新

    一旦事件循环开始运行,就会开始执行本身的脏值检测.一旦检测到变化,就会触发 $scope 上指定的回调函数

  4. 销毁

    一般来说若是一个 $scope 在视图中再也不须要, Angular 会本身清理它.固然也能够经过 $destroy() 函数手动清理.

相关文章
相关标签/搜索