angular中变量是双向绑定的,那么怎么知道一个变量是否变化了呢?

  1. 通过固定的接口才能改变变量的值,比如说只能通过set()设置变量的值,set被调用的时候比较一下就知道了。这种做法是写法比较繁琐。

  2. 脏检查,将原对象赋值一份快照,在某个时间,比较现在对象与快照的值,如果不一样,就表明发送了变化,这个策略要保留两份变量,而且要遍历对象,比较每个属性,会有一定的性能问题。

AngularJS使用脏检查

  1. 不会脏检查所有对象。当对象被绑定到HTML中后,这个对象才会添加为检查对象(watcher)

  2. 不会脏检查所有的属性,同样属性被绑定后,这个属性才会被列为检查的属性

$scope中有个$$watchers和$$watchersCount属性代表被检查的对象和个数。

$watch()

在线清理html网页(育知同创HTML5培训课程)(1)

$apply()

apply实现脏检查实际上是通过digest实现的,但是我们不能直接使用apply 与evel判断。如果中间有错误exceptionHandler进行处理。

,