Angular ui-router解析 - 使用$ state.go

时间:2016-12-29 23:20:29

标签: javascript angularjs angular-ui-router

我只是学习ui-router解析,如果用户没有登录,我想简单地重定向我的状态。

似乎我不能简单地在回调函数中使用$state.go

这是我的代码:

.state('base.user', {
  url: '/user',
  templateUrl: 'views/user.html',
  controller: 'userCtrl',
  resolve: {
    test: function($state, $q) {
      var deferred = $q.defer();
      if (!loggedIn()) { // resolves to false when not logged-in
        deferred.reject();
        $state.go('base.test'); // ** Throws "Possibly unhandled rejection" error
      } else {
        deferred.resolve();
        /* and maybe do some more stuff.. */
      }
    }
  }
})

我知道这通常是通过服务和类似的东西完成的,但就目前而言,我只想要一个简单的工作示例。

2 个答案:

答案 0 :(得分:2)

我们决定处理它的方式是听$stateChangeError,如果抛出的错误包含路径,那么转到那条路。

$rootScope.$on('$stateChangeError', function(toState, toParams, fromState, fromParams, error) {
  if (error.state) {
    $state.go(error.state, error.stateParams);
  }
});

在你的决心中:

test: function($q) {
  var deferred = $q.defer();
  if (!loggedIn()) {
    deferred.reject({state: 'base.test'});
  } else {
    deferred.resolve();
  }
  return deferred.promise;
}

答案 1 :(得分:1)

实现$ stateChangeStart挂钩并检查那里的重定向条件

$rootScope.$on('$stateChangeStart', function (event, toState) {      
     if (toState.name === 'base.user') {              
       if(!loggedIn()) { // Check if user allowed to transition                  
            event.preventDefault();   // Prevent migration to default state                  
            $state.go('base.test');           
        }
      }
});