我正在使用ui.router使用angularjs进行简单的登录/注册。
登录路线是: common / signin
注册路线是: 公共/注册
'common'状态的代码:
$stateProvider.state('common',{
url:'/common',
templateUrl:'templates/common.html',
abstract:true,
resolve:{
//if acces token is found in local storage then change route to portal/dashboard
//else continue to common/signin or common/signup
}
});
有没有办法改变解决方案中的路线。 我知道这可以在登录和注册的控制器中完成。 即: 我会检查控制器的标志:
app.controller('signinController',['tokenService','$scope','$state',function(tokenService,$scope,$state){
if(tokenService.getToken()!=null){
$state.go('portal.dashboard');
}
}]);
并且在注册控制器中完成相同的任务。
app.controller('signupController',['tokenService','$scope','$state',function(tokenService,$scope,$state){
if(tokenService.getToken()!=null){
$state.go('portal.dashboard');
}
}]);
但这将是一个重复的代码,我总是在复制之前质疑自己。 并且这样做会闪烁登录或注册模板,然后显示仪表板。
所以我在考虑在共同状态下路由时检查相同的方法。 有没有办法通过我可以做的服务来做到这一点:
if(token found in local storage){
$q.reject();
$state.go('portal.dashboard')
}
else{
$q.resolve();
//continue to do /signup or /signin
}
答案 0 :(得分:1)
你可以注入$ timeout
$stateProvider.state('common',{
url:'/common',
templateUrl:'templates/common.html',
abstract:true,
resolve:{
auth:function($timeout,$state,$q){
if(token found in local storage){
$timeout(function(){
$state.go('dashboard')
})
return $q.reject();
}
else{
return $q.resolve(token);
}
}
}
});
这样的事情会起作用
答案 1 :(得分:0)
您正在使用状态,因此我会使用
$ state.go(状态);
https://github.com/angular-ui/ui-router/wiki/Quick-Reference#stategoto--toparams--options
如果您想拥有共同状态的多个子状态,可以考虑使用嵌套状态:
https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views