Angular 每个绑定到UI的数据,就会有一个 $watch 对象。javascript
watch = { name:'', //当前的watch 对象 观测的数据名 getNewValue:function($scope){ //获得新值 ... return newValue; }, listener:function(newValue,oldValue){ // 当数据发生改变时须要执行的操做 ... } }
每当咱们将数据绑定到 UI 上,angular 就会向你的 watchList 上插入一个 $watch。
好比:{{model}}java
当model的值发生变化时,就发生了一次检查。ajax
简单理解,一次脏检查就是调用一次 $apply() 或者 $digest(),将数据中最新的值呈如今界面上。app
而每次 UI 事件变动,ajax 还有 timeout 都会触发 $apply()。函数
$digest()
检测当前scope以及子scope中全部的watches,由于监听函数会在执行过程当中修改model(scope中的变量),$digest()会一直被调用直到model没有再变。当调用超过10次时,$digest()会抛出一个异常"Maximum iteration limit exceeded',以此来防止程序进入一个死循环。对象