$ evalAsync是否使$ scope。$ apply不必要?

时间:2015-12-09 08:46:45

标签: angularjs

根据我的理解,$evalAsync会将更改排队到当前的摘要周期,如果可以的话,如果没有,则将其更改为下一个。

那么在哪种情况下我会使用$scope.$apply

它们都在$rootScope上运行摘要,但是$evalAsync可以通过挂钩到当前的摘要周期来加快速度,这在99%的情况下听起来更好。

1 个答案:

答案 0 :(得分:0)

我在下面的链接中看到过这个信息,我感觉很好,这对你有用! http://www.codingeek.com/angularjs/angular-js-apply-timeout-digest-evalasync/

$evalAsync()是一个新功能,最初是在AngularJS 1.2.X中引入的,我认为它是$timeout()的熟练版本。

$evalAsync()出现之前,AngularJS团队建议在消化周期问题的情况下使用$timeout(),如上所述。

随着AngularJS为大型应用程序的发展而逐渐消化循环,然后Angular团队推出了$evalAsync()。此函数将在当前周期或下一周期中评估表达式。

假设您在$evalAsync()上调用了一些表达式,并且任何摘要周期都在同一时间进行。来自$evalAsync()的所有表达式都将添加到队列中,它们将成为当前生命周期的一部分,并且不会调用新的摘要周期。这就是$evalAsync()使其更有效的原因,因为它减少了每次创建新摘要的可能性。

如果没有任何摘要,它将与$ timeout类似。它将创建一个默认时间(10毫秒)的回调,在此时间(10毫秒)之后,rootScope上会有一个新的摘要,所有表达式都将被评估。