Angular:为什么$ evalAsync不是$ applyAsync?

Eva*_*ahn 6 asynchronous definition angularjs angularjs-digest

关于范围的角度初学者问题(这里的文档).

  1. $eval 在范围的上下文中执行表达式.
  2. $apply基本上是打电话$eval然后$digest.
  3. 为什么要$evalAsync打电话$digest(或者更确切地说,确保$digest被叫)?

似乎应该真的被称为,不是吗?$evalAsync$applyAsync

我是初学者 - 我错过了什么?

Pau*_*tte 2

$applyAsync 已经存在:

安排稍后调用 $apply 。实际时间差异因浏览器而异,但通常约为 10 毫秒左右。

这可用于对需要在同一摘要中计算的多个表达式进行排队

evalAsync 以不同的方式处理摘要:

$evalAsync 触发摘要,并且在预计不应发生摘要时不适合。

注意:如果在 $digest 周期之外调用此函数,则会安排一个新的 $digest 周期。

在 AngularJS 1.3 中隐式调用时, this 的行为发生了变化:

- 以前,即使 invokeApply 设置为 false,在 Promise 解析期间也会发生 $rootScope 摘要。现在情况不再是这样,因为如果 invokeApply 为 false,从 $timeout 和 $interval 返回的承诺将不再触发 $evalAsync (这反过来会导致 $digest)。

解决方法包括手动触发 $scope.$apply(),或从 Promise 回调返回 $q.defer().promise,并在适当时解决或拒绝它。

参考