[英]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.