为什么我需要一个 $scope.$digest in Promise

Why I need a $scope.$digest in Promise

全部:

我对 angular 摘要还很陌生,现在,当我使用 Promise 时,在它的 then 函数中,我必须使用 $scope.$digest() 来使范围变量更改对其他变量生效地点,例如:

这里我使用了一个Promise来模拟$http请求,我的困惑在$scope.getdata,为什么我需要调用$scope.$digest(),我想$scope.disable 应该由 angular 自动观看。

var app = angular.module("vp", []);
app
    .service("srh", function($http){
        var busy = false;
        this.get = function(url){
            if(!busy){
                busy = true;
                var p = new Promise(function(res, rej){
                            $timeout(function(){
                                res("data is fetched");
                            }, 3000);
                        })
                        .then(function(data){
                            busy = false;
                            return data;
                        }, function(data){
                            busy = false;
                            return data;
                        });
                return p;
            }else {
                return null;
            }
        }
    })// end of service
    .controller("main", function($scope, srh){
        $scope.disable = false;
        $scope.getdata = function(){
            var dp = srh.get("");
            if( dp ) {
                $scope.disable = true;
                dp.then(function(data){
                    console.log(data);
                    $scope.disable = false;
                    $scope.$digest()
                })
            }
        }
    })

使用 $q angular promises,它将在内部处理所有摘要要求。

每当您在 angular 核心之外使用修改范围的事件时,您需要告诉 angular 以便它可以更新视图