javascript - 我什么时候应该调用 $digest 而不是 $apply?

标签 javascript angularjs angularjs-scope

我都看过

$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/

相关文章:

javascript - 具有与 jQuery 类似功能的模块化 Javascript 库

javascript - localStorage 值不会自动更新

javascript - strongloop中如何调用存储过程

javascript - 从指令内部 $watch 对 ngModel 的外部更改的正确方法

javascript - 在运行时使用 javascript 加载 div 背景图像(通过/使用?CSS)

javascript - 如何在 Node.JS 中多行编写函数的输出

javascript - 跨 Controller 共享 ng-repeat 表单字段的数据

javascript - Angular .min.js :118 Error: [ng:areq]

javascript - AngularJS - 如何在 ng-click 上触发过滤器

angularjs - 为什么不重新评估 ng-maxlength?