在阅读这本优秀的书 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条答案
按热度按时间lmvvr0a81#
$scope.$digest()
是处理当前作用域和子作用域中所有$watch
事件的函数。它实际上是手动告诉作用域检查作用域变量是否已更改。当您在控制器或指令中时,通常不希望使用此函数,因为$scope.$apply()
函数无论如何都会调用$digest
,并且当您改变作用域变量时,它会被调用。查看此链接以获取示例。
iszxjhcz2#
这里不需要
$rootScope.$digest
,因为解析/拒绝承诺会在内部触发$rootScope.$digest
,因为$interval
、$timeout
和$http
(在请求完成后)会为您执行这些操作,并且$digest
会抛出已经在进行中的$digest
错误。