我都看过
$rootScope.$apply();
和
$rootScope.$digest();
在工厂内部使用。然而Angular docs说:
Usually, you don't call $digest() directly in controllers or in directives. Instead, you should call $apply() (typically from within a directive), which will force a $digest().
If you want to be notified whenever $digest() is called, you can register a watchExpression function with $watch() with no listener.
In unit tests, you may need to call $digest() to simulate the scope life cycle.
不直接调用 $digest
的优点之一是避免运行无限循环。
是否存在应该使用 $digest
而不是 $apply
的情况(除了测试,如引用中所述)?
最佳答案
当您的应用程序变得足够大以至于摘要变得非常昂贵时,您可以在确定不会对应用程序的其他部分造成副作用的范围内调用摘要。
例如,您可能已经引入了一个 jQuery 日历插件,您通常会调用 $apply 来观察它与范围的绑定(bind)。此日历可能用于反馈表,因此可以说,它独立于应用程序的其余部分,后者可能是拥有数千名观察者的大型实时数据馈送。
您日历上的 scope.apply 将遍历您的整个应用程序,并在不必要时对您所有数千名观察者进行脏检查以获取您的实时提要。在这种情况下,您应该调用 $scope.$digest() 因为您知道只有日历模型发生了变化。
关于javascript - 我什么时候应该调用 $digest 而不是 $apply?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32454660/