【发布时间】:2017-04-04 19:06:45
【问题描述】:
这是我的 .run 函数:
.run(function ($transitions, UserService) {
$transitions.onStart({ to: function(state) {
return state.data != null && state.data.requireLogin === true && UserService.getUser().isLogged !== true;
}},function(trans){
var AuthService = trans.injector().get('AuthService');
var $q = trans.injector().get('$q');
var $state = trans.injector().get('$state');
var defer = $q.defer();
AuthService.login().then(function (status){
if(status === 'login'){
defer.resolve(true);
}else if (status === 'register'){
defer.resolve($state.target('map.register'));
}
}, function (msg){
// Here is part that I am asking for
defer.resolve(false);
});
return defer.promise;
});
});
基本上,如果转换到需要登录且用户未登录的状态,则使用transitionHookFn。在那里我使用AuthService.login() 并返回状态承诺。如果AuthService.login() 失败(用户取消)promise 将返回 false 并取消转换,从而使用户处于与他相同的状态。
当用户在首次加载时尝试访问受限页面并取消登录时,问题就开始了,因为没有先前的状态并且整个页面都是空白的。
如果有先前的状态,有没有办法取消转换,如果没有,则重定向到家?我需要访问以前的状态并查看它是否存在。
【问题讨论】:
标签: javascript angularjs angular-ui-router