为什么我需要一个 $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 以便它可以更新视图
全部:
我对 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 以便它可以更新视图