Angular的$ rootScope#$ digest

时间:2014-01-05 00:09:22

标签: javascript angularjs

阅读这本优秀的书(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();来电?

2 个答案:

答案 0 :(得分:1)

$ scope。$ digest()处理当前和子范围内的所有$ watch事件。它基本上手动告诉范围检查范围变量是否已更改。当你在一个控制器或一个指令中时,通常不想使用它,因为$ scope。$ apply()函数无论如何都会调用$ digest,当你改变一个范围变量时会调用它。

查看此link以获取示例。

答案 1 :(得分:0)

此处您不需要$rootScope.$digest。因为解析/拒绝承诺将会$rootScope.$digest$intervel$timeout内部$http。 (请求完成后)为您完成。而这个$ digest可能会抛出正在进行的$ digest错误。