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