2016-12-29 9 views
1

あなたは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

私たちが処理することを決めたのは$stateChangeErrorです。スローされたエラーにパスが含まれている場合は、そのパスに移動します。 $ stateChangeStartフックを実装

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

をして

$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');   
     } 
     } 
}); 
そこにあなたのリダイレクト条件を確認してください。

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

そして、あなたに解決

関連する問題