在阅读这本优秀的书(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();调用?
发布于 2014-01-05 09:20:11
$scope.$digest()处理当前和子范围内的所有$watch事件。它基本上是手动告诉作用域检查作用域变量是否已更改。当您在控制器或指令中时,您通常不希望使用它,因为$scope.$apply()函数无论如何都会调用$digest,并且它会在您改变作用域变量时调用。
请查看此link以获取示例。
发布于 2016-02-02 18:35:09
在这里你不需要$rootScope.$digest .because解析/拒绝promise将触发$rootScope.$digest内部,因为$intervel,$timeout,$http(在请求完成后)会为你做这件事。并且这个$digest可以抛出已经在进行中的$digest的错误。
https://stackoverflow.com/questions/20928374
复制相似问题