关于范围的 Angular 初学者问题( docs here )。
$eval
在作用域的上下文中执行表达式。 $apply
基本上是打电话$eval
然后 $digest
. $evalAsync
调用 $digest
也是(或者,更准确地说,确保 $digest
被调用)? 好像是
$
eval
Async
真的应该叫$
apply
Async
,不是吗?我是初学者 - 我错过了什么?
最佳答案
$evalAsync
和 $applyAsync
针对不同的情况。
$evalAsync : 将表达式推迟到 当前摘要周期的下一个循环迭代 .一个 Angular 摘要循环循环几次,直到没有数据是脏的。如果没有摘要循环正在进行,它将开始一个新的摘要循环(调用 $apply
方法)并评估其中的表达式(调用 $eval
方法)。如果您在 Angular 作用域之外调用函数,但在消化周期已经在进行中时仍想消化脏数据,则此方法很有用,在这种情况下,您无法调用 $apply
.
$applyAsync : 将表达式推迟到 下一周期摘要 .它总是在计算表达式后开始一个新的摘要循环(调用 $apply
方法)。如果您经常在具有脏范围数据的 Angular 范围外执行一些服务回调(如 $http
服务),则此方法很有用。但是,如果它为每个回调启动摘要,则可能会出现性能不佳的情况。因此,该方法通过在多个异步回调之间共享摘要周期来优化流程,其性能优于方法 $evalAsync
.
关于angularjs - Angular : why isn't $evalAsync called $applyAsync?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21471355/