Page 26 - AngularJS权威教程
P. 26
6 第 2 章 数据绑定和第一个 AngularJS Web 应用
①
AngularJS 会记录数据模型所包含的数据在任何特定时间点的值(在Hello World例子中就是
name的值),而不是原始值。
当AngularJS认为某个值可能发生变化时,它会运行自己的事件循环来检查这个值是否变
“脏”。如果该值从上次事件循环运行之后发生了变化,则该值被认为是“脏”值。这也是Angular
可以跟踪和响应应用变化的方式。
这个事件循环会调用$digest()循环,第23章将会详细介绍。
这个过程被称作脏检查(dirty checking)。脏检查是检查数据模型变化的有效手段。当有潜
在的变化存在时,AngularJS会在事件循环时执行脏检查(第24章会深入讨论)来保证数据的一
致性。
如果使用KnockoutJS这种通过在数据模型上绑定事件监听器来监听数据变化的框架,这个
②
过程会变得更复杂且低效 。处理事件合并、依赖跟踪和大量的事件触发(event firing)是非常复
杂的,而且会在性能方面导致额外的问题。
尽管存在更高效的方式,但脏检查可以运行在所有浏览器中并且是可预测的。
③
此外,很多在速度和效率方面有要求的软件都会使用脏检查的方案 。
借助AngularJS,不需要构建复杂和新的JavaScript功能,就可以在视图中实现类自动同步的
机制。
为了表示内部和内置的库函数,Angular使用$预定义对象。尽管这类似于全局的jQuery
对象$,但它们是完全无关的。只要遇到$符号,你都可以只把它看作一个Angular对象。
2.2 简单的数据绑定
审阅一下上面写的代码,我们使用ng-model指令将内部数据模型对象($scope)中的name
属性绑定到了文本输入字段上。
这意味着无论在文本输入字段中输入了什么,都会同步到数据模型中。
数据模型对象(model object)是指$scope对象。$scope对象是一个简单的
JavaScript对象,其中的属性可以被视图访问,也可以同控制器进行交互。如果
不理解这个概念也没有关系,后面的例子将会对这个概念进行详细说明。
双向数据绑定(bi-directional)意味着如果视图改变了某个值,数据模型会通过
脏检查观察到这个变化,而如果数据模型改变了某个值,视图也会依据变化重
新渲染。
在输入字段上使用ng-model指令来实现数据绑定,如下所示:
——————————
① http://angularjs.org
② 这有些言过其实,低效是真,复杂未必。——译者注
③ 比如在游戏开发中就大量使用脏检查技术。——译者注