作用域(scope)①是构成AngularJS应用的核心基础,在整个框架中都被广泛使用,因此了解
它如何工作是非常重要的。
应用的作用域是和应用的数据模型相关联的,同时作用域也是表达式执行的上下文。$scope
对象是定义应用业务逻辑、控制器方法和视图属性的地方。
作用域是视图和控制器之间的胶水。在应用将视图渲染并呈献给用户之前,视图中的模板会
和作用域进行连接,然后应用会对DOM进行设置以便将属性变化通知给AngularJS。这个功能让
XHR请求等promise对象的实现变得非常容易。查看第17章获取更多关于promise对象的内容。
作用域是应用状态的基础。基于动态绑定,我们可以依赖视图在修改数据时立刻更新$scope,
也可以依赖$scope在其发生变化时立刻重新渲染视图。
AngularJS将$scope设计成和DOM类似的结构,因此$scope可以进行嵌套,也就是说我们可
以引用父级$scope中的属性。
如果你了解JavaScript,对这个分层的概念应该并不陌生。在JavaScript中,当创建
一个新的执行上下文时,实际上是用函数创建了一个新的本地上下文。AngularJS中
$scope的概念与其类似,当为子DOM元素创建新的作用域时,实际上是为子DOM元素
创建了一个新的执行上下文。
作用域提供了监视数据模型变化的能力。它允许开发者使用其中的apply机制,将数据模型
的变化在整个应用范围内进行通知。我们在作用域的上下文中定义和执行表达式,同时它也是将
事件通知给另一个控制器和应用其他部分的中介。
将应用的业务逻辑都放在控制器中,而将相关的数据都放在控制器的作用域中,这是非常完
美的架构。