为什么我需要一个$ scope。$ Promgest in Promise

时间:2016-01-25 23:36:11

标签: angularjs angular-digest

所有

我对角度摘要很新,现在,当我使用Promise时,在其函数中,我必须使用$ scope。$ digest()使范围变量更改在其他地方生效,例如:

这里我使用Promise来模拟$ http请求,我的混淆在于$ scope.getdata,为什么我需要调用$ scope。$ digest(),我认为应该通过angular观察$ scope.disable自动

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()
                })
            }
        }
    })

1 个答案:

答案 0 :(得分:2)

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

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