Angular 是通过脏检测来进行双向数据绑定. 所谓的双向绑定, 无非是从界面的操作能实时反映到数据, 数据的变更能实时展现到界面.
angular 数据双向绑定的原理:
页面中每绑定一个数据或者事件时, 就会向 $watch 队列中加入一条 $watch, 当浏览器接受到可以被 angular context(当事件触发, 调用 $apply 进入 angular context) 处理的事件时, 就会触发 digest 循环, 它会遍历每一个 $watch 检查其属性和值是否发生改变, 如果改变则用新值覆盖旧值, 直到所有 $watch 检查完. 如果此次 digest 循环有更新, 那么会再次触发 digest 循环, 直到所有的 $watch 都没有更新为止.
Angular 在 $digest cycle 流程里面, 会从 rootscope 开始遍历, 检查所有的 watcher.
Angular 只有指定事件触发, 才会进入 $digest cycle:
1,DOM 事件, 比如用户输入文本, 点击按钮等.
2,Ajax 事件
3, 浏览器 location 变更事件
4,Timer 事件 ($timeout,$interval)
5, 执行 $digest() 或 $apply()
来源: http://www.css88.com/qa/angular-js/11917.html