改变路线的决心

时间:2015-02-17 19:22:46

标签: angularjs angular-ui-router

我正在使用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
}

2 个答案:

答案 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