我什么时候应该拨打$ digest而不是$ apply?

U r*_*u s 1 javascript angularjs angularjs-scope

我见过两者

$rootScope.$apply();

$rootScope.$digest();

在工厂内使用.但是Angular的文档说:

通常,您不直接在控制器或指令中调用$ digest().相反,你应该调用$ apply()(通常来自一个指令),这将强制$ digest().

如果您希望在调用$ digest()时收到通知,则可以使用$ watch()注册watchExpression函数而不使用侦听器.

在单元测试中,您可能需要调用$ digest()来模拟范围生命周期.

$digest直接调用的优点之一是避免运行无限循环.

是否有其中一个应该使用任何情况下,$digest$apply(除了测试,在报价提到的)?

sah*_*wah 6

当您的应用程序变得足够大以至于摘要变得非常昂贵时,您可以在范围内调用摘要,确保不会对应用程序的其他部分造成副作用.

例如,您可能已经引入了一个jQuery日历插件,您通常会调用$ apply on来观察其与范围的绑定.此日历可能用于反馈表单,因此它可以独立于您的应用程序的其余部分,这可能是一个拥有数千名观察者的大型实时数据源.

日历上的scope.apply将遍历整个应用程序,并在没有必要的情况下对所有数千名观察者进行脏检查以获取实时Feed.在这种情况下,您应该调用$ scope.$ digest(),因为您只知道日历模型已更改.