angular.js的$digest循环

$digest循环分为两个部分:

  • $watch列表
  • $evalAsync列表

$watch列表($$watchers)

watch digest循环期间监控的所有变化的集合。 digest watch列表会在$digest循环中通过一个叫做“脏值检查”的程序解析。

脏值检测

脏值检查是一个简单的过程,可归结为一个非常基础的概念:检查值是否发生了变化,而整个应用还没同步该变化。
Angular会遍历$watch列表,如果从旧值更新后的值没有发生变化,它会继续遍历监控列表。如果值发生了变化,该应用会启用新值并继续遍历$watch列表,Anguar遍历完整个$watch列表,只要有任何值发生变化,应用将会退回到$watch循环中,直到检测到不再有任何变化。

$evalAsync 列表($$asyncQueue

$evalAsync()方法是一种在当前作用域上调度表达式在未来某个时刻运行的方式。$digest循环运行的第二个操作是执行$$asyncQueue。可以使用$evalAsync()方法访问这个工作队列。

$apply

Created with Raphaël 2.1.0 调用$apply 进入angular上下文 调用$digest循环 脏值检测 检测到无变化 退出$digest,控制权交给浏览器 yes no
发布了51 篇原创文章 · 获赞 23 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/liuqi332922337/article/details/54413364