Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度ui路由器解析-使用$state.go_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

Javascript 角度ui路由器解析-使用$state.go

Javascript 角度ui路由器解析-使用$state.go,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我正在学习ui路由器解析,如果用户未登录,我只想重定向我的状态 似乎我不能简单地在回调函数中使用$state.go 这是我的密码: .state('base.user', { url: '/user', templateUrl: 'views/user.html', controller: 'userCtrl', resolve: { test: function($state, $q) { var deferred = $q.defer(); i

我正在学习ui路由器解析,如果用户未登录,我只想重定向我的状态

似乎我不能简单地在回调函数中使用
$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.. */
      }
    }
  }
})

我知道这通常是通过服务和类似的事情来实现的,但现在,我只想看一个简单的工作示例

我们决定处理它的方法是侦听
$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;
}

实现$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');           
        }
      }
});