$digest循环分为两个部分:
- $watch列表
- $evalAsync列表
$watch
列表($$watchers
)
watch列表是 digest循环期间监控的所有变化的集合。 digest循环期间,这些 watch列表会在$digest循环中通过一个叫做“脏值检查”的程序解析。
脏值检测
脏值检查是一个简单的过程,可归结为一个非常基础的概念:检查值是否发生了变化,而整个应用还没同步该变化。
Angular会遍历$watch
列表,如果从旧值更新后的值没有发生变化,它会继续遍历监控列表。如果值发生了变化,该应用会启用新值并继续遍历$watch
列表,Anguar
遍历完整个$watch
列表,只要有任何值发生变化,应用将会退回到$watch
循环中,直到检测到不再有任何变化。
$evalAsync
列表($$asyncQueue
)
$evalAsync()
方法是一种在当前作用域上调度表达式在未来某个时刻运行的方式。$digest
循环运行的第二个操作是执行$$asyncQueue
。可以使用$evalAsync()
方法访问这个工作队列。