阅读这本优秀的书(Mastering Web Development in AngularJS),我遇到了这段代码:
var Restaurant = function ($q, $rootScope) {
var currentOrder;
this.takeOrder = function (orderedItems) {
currentOrder = {
deferred:$q.defer(),
items:orderedItems
};
return currentOrder.deferred.promise;
};
this.deliverOrder = function() {
currentOrder.deferred.resolve(currentOrder.items);
$rootScope.$digest();
};
this.problemWithOrder = function(reason) {
currentOrder.deferred.reject(reason);
$rootScope.$digest();
};
我的理解是$rootScope.$digest();
来电是为了提醒Angular Promise
的状态已更新。
我的理解是否正确?此外,是否有必要进行上述$rootScope.$digest();
来电?
答案 0 :(得分:1)
$ scope。$ digest()处理当前和子范围内的所有$ watch事件。它基本上手动告诉范围检查范围变量是否已更改。当你在一个控制器或一个指令中时,通常不想使用它,因为$ scope。$ apply()函数无论如何都会调用$ digest,当你改变一个范围变量时会调用它。
查看此link以获取示例。
答案 1 :(得分:0)
此处您不需要$rootScope.$digest
。因为解析/拒绝承诺将会$rootScope.$digest
,$intervel
,$timeout
内部$http
。 (请求完成后)为您完成。而这个$ digest可能会抛出正在进行的$ digest错误。