angular 数据同步

1.数据绑定

angular属于MVVM模式,视图更新后自动更新数据模型,数据模型更新后自动更新视图。

2.脏值检测

$watch:检测模型和视图是否同步,若没有同步,它将会使用新值来更新模型数据。即监控变量的变化,若变量值发生变化,执行$watch。

$digest:触发当前作用域和它的子作用域上的$watch。

$apply:触发整个作用域树上的所有$watch。

$watch队列:在模板上绑定一个东西,就会往$watch队列里插入一条$watch。

$digest循环:由两个更小的循环组合起来的,一个处理evalAsync队列,另一个处理$watch队列。$digest会遍历$watch队列(即脏值检测),更新模型的值。一次遍历完$watch队列后,若有$watch更新,重新开始遍历$watch队列,... 直到遍历$watch队列没有更新(如果遍历超过10次,它会抛出一个异常,防止无限循环)循环结束。循环结束后,根据模型的值更新DOM。可以使用$apply方法,触发整个树状作用域的$digest循环。

图1 脏值检测

 

3.触发脏值检测($apply或$digest)

(1)  自动触发

       setTimeout、click事件等。

(2)手动触发

       a.调用$apply b.调用$digest

 

 

[1]http://www.angularjs.cn/A0a6

posted @ 2016-06-28 16:54  springmin  阅读(316)  评论(0编辑  收藏  举报