文章目录
什么是作用域
作用域是一个存储应用数据模型的对象,对应于MVC中的M(model)层
作用域的层级结构对应于DOM Tree 结构
为表达式提供了一个执行上下文(context),作用域可以监听表达式的变化并传播事件
如何创建作用域
angular可以通过指令
创建子作用域且继承自父作用域
1、 ng-repeat。
2、 ng-include。
3、 ng-switch。
4、 ng-controller。
5、 directive (scope: true)。
6、 directive(transclude: true)。
<div ng-repeat="(key, value) in cache.info()">
<span ng-bind="key"></span>
<span>: </span>
<b ng-bind="value"></b>
</div>
上面这串代码就创建了一个作用域,就可以使用$scope.key
和$scope.value
来在作用域中定义变量了
作用
- 提供
$watch()
方法监听数据模型的变化 - 提供
$spply()
方法把不是由Angular触发的数据模型的改变引入Angular的控制范围内(如控制器,服务,及Angular事件处理器等) - 作用域提供了基于原型链继承其父作用域属性的机制,就算是嵌套于独立的应用组件中的作用域也可以访问共享的数据模型(这个涉及到指令间嵌套时作用域的几种模式)
- 作用域提供了 表达式 的执行环境,比如像
{ {username}}
这个表达式,必须得是在一个拥有属性这个属性的作用域中执行才会有意义,也就是说,作用域中可能会像这样scope.username
或是$scope.username
,至于有没有 $ 符号,看你是在哪里访问作用域了
作用域作为数据模型使用
作用域是Web应用的控制器和视图之间的粘结剂。在Angular中,最直观的表现是:在自定义指令中,处在模版的 链接(linking) 阶段时, 指令(directive)会设置一个 $watch 函数监听着作用域中各表达式(注:这个过程是隐式的)。这个 $watch 允许指令在作用域中的属性变化时收到通知, 进而让指令能够根据这个改变来对DOM进行重新渲染,以便更新已改变的属性值(注:属性值就是scope对象中的属性,也就是数据模型)。
其实,不止上面所说的指令拥有指向作用域的引用,控制器中也有(注:可以理解为控制器与指令均能引用到与它们相对应的DOM结构所处的作用域)。 但是控制器与指令是相互分离的,而且它们与视图之间也是分离的,这样的分离,或者说耦合度低,可以大大提高对应用进行测试的工作效率。
注:其