[英]Controller doesn't wait for resolve
我有解決的方法,但是控制器似乎在完成之前就已運行。
$stateProvider.state('index', {
url: '/',
templateUrl: '/angular/general/index.general.html',
resolve: {
data: function(currentUser){
currentUser.resolveLogin();
}
},
controller: ['$state', 'currentUser', function($state, currentUser){
console.log('3');
if (currentUser.bLoggedIn()){
$state.go('index.dashboard');
}
}]
});
在currentUser中
this.resolveLogin = function(){
var deferred = $q.defer();
console.log('1')
$http.get('/profile')
.success(function(res){
console.log('2.1')
root.user = res.data;
deferred.resolve();
})
.error(function(res){
console.log('2.2')
deferred.reject();
});
// return promise object
return deferred.promise;
}
而不是以1、2.1、3的順序登錄,而是以1、3、2.1的順序登錄。
您會忘記來自resolve函數的返回承諾,因此angular不應等待它。
因此,如果currentUser.resolveLogin();
退貨承諾,你應該只退貨
resolve: {
data: function(currentUser){
return currentUser.resolveLogin();
}
},
旁注: $http
已經返回諾言,因此,您無需手動創建它,並且可以將this.resolveLogin
減少為類似這樣的內容
this.resolveLogin = function(){
console.log('1')
return $http.get('/profile')
.success(function(res){
console.log('2.1')
root.user = res.data;
})
.error(function(res){
console.log('2.2')
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.