如果我有一个指令响应范围上的特定
属性的状态,并且我想在我的测试中更改该
属性,并验证它的响应正确,这是最好的方式做这种更改?
我看到了这两种模式:
scope.$apply(function() {
scope.myAttribute = true;
});
和
scope.myAttribute = true;
scope.$digest();
他们之间有什么区别,哪个更好,为什么?
范围。$ digest()将触发当前作用域上的观察者,以及它所有的孩子。 $ apply将评估传递的
函数并运行$ rootScope。$ digest()。
第一个更快,因为它需要评估当前范围及其子项的观察者。第二个更慢,因为它需要评估$ rootScope的观察者和它的所有子范围。
当一个错误发生在一个观察者和你使用范围$ digest,它不是通过$ exceptionHandler服务处理,所以你需要自己处理异常。 $ apply在内部使用一个try-catch块,并将所有异常传递给$ exceptionHandler。