angularjs Angular的$rootScope.$摘要

qjp7pelc  于 2022-11-21  发布在  Angular
关注(0)|答案(2)|浏览(117)

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

lmvvr0a8

lmvvr0a81#

$scope.$digest()是处理当前作用域和子作用域中所有$watch事件的函数。它实际上是手动告诉作用域检查作用域变量是否已更改。当您在控制器或指令中时,通常不希望使用此函数,因为$scope.$apply()函数无论如何都会调用$digest,并且当您改变作用域变量时,它会被调用。
查看此链接以获取示例。

iszxjhcz

iszxjhcz2#

这里不需要$rootScope.$digest,因为解析/拒绝承诺会在内部触发$rootScope.$digest,因为$interval$timeout$http(在请求完成后)会为您执行这些操作,并且$digest会抛出已经在进行中的$digest错误。

相关问题