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
                ② 这有些言过其实,低效是真,复杂未必。——译者注
                ③ 比如在游戏开发中就大量使用脏检查技术。——译者注
   21   22   23   24   25   26   27   28   29   30   31