一尘不染

指令测试中的$ apply与$ digest

angularjs

如果我有一个指令可以响应示波器上特定属性的状态,并且我想在测试中更改该属性并验证其是否正确响应,那是进行此更改的最佳方法?

我已经看过这两种模式:

scope.$apply(function() {
    scope.myAttribute = true;
});

scope.myAttribute = true;
scope.$digest();

它们之间有什么区别,哪个更好,为什么?


阅读 183

收藏
2020-07-04

共1个答案

一尘不染

scope.$digest()会在当前范围及其所有子级上触发监视程序。scope.$apply将评估传递的函数并运行$rootScope.$digest()

第一个更快,因为它需要评估观察者的当前范围及其子级。第二个比较慢,因为它需要评估观察者$rootScope及其所有子作用域。

当其中一个观察者发生错误并且使用时scope.$digest,不会通过$exceptionHandler服务进行处理,因此您需要自己处理异常。scope.$applytry- catch内部使用块并将所有异常传递到$exceptionHandler

2020-07-04