作用域($scope)
实质上是一个作用哉对象,作用:存储数据模型、为表达式提供上下文环境、监听表达式变化并传播事件,是view与controller之间的重要桥梁。
1.特点
提供了一个$watch方法来监听数据模型的变化,ng-model实现的双向数据绑定就是通过调用访方法进行数据模型监听;
$watch方法监控模型数据的变化,主要是因为在Angula内部,当对绑定ng-model指定的属性进行修改时,其内部的$digest方法就会自动执行一次,检测ng-mode所绑定的属性值与上次$digest方法执行时获取的内容是否一致,如果不一致,则执行$watch方法绑定的处理函数。
提供另一个$apply方法,为各种类型的数据模型改变提供支撑,例如通过view中ng-click指定,执行controller中的代码;
为表达式提供执行的环境,作用域通过提供$scope对象,使所有的表达式都拥有对应的执行环境,也就是执行的上下文对象。
2.作用数据模型的作用域
作用域不仅是controller与view的桥梁,也是view与指定的桥梁,因为在自定定指令时,会调用$watch方法监听各个表达式的变化,一旦作用域中的表达式发生了变化,$wathc方法将通知指令,而指令将根据这个变化重新渲染DOM页面,即更新作用域中的属性值内容。
无论是指定,还是controller,它们都可以通过作用域与视图中的DOM绑定。由此,诞生2个数据关系链接,一条是:指定—>作用域—>view,另一条是:controller—>$scope—>view,这2条关系链之间还是相互独立的。
3.作用域的层级和事件
作用域在绑定了页面元素后,便依据元素的层次关系形成了自身的层级关系,而这这些层级关系中,它们可以通过事件的传播进行数据的通信,只是这种通过事件的数据通信的应用场景非常有限,仅限于父和子级之间的作用域。