2017-04-04 7 views
2

は私の.RUN機能である:

.run(function ($transitions, UserService) { 
    $transitions.onStart({ to: function(state) { 
     return state.data != null && state.data.requireLogin === true && UserService.getUser().isLogged !== true; 
    }},function(trans){ 
     var AuthService = trans.injector().get('AuthService'); 
     var $q = trans.injector().get('$q'); 
     var $state = trans.injector().get('$state'); 
     var defer = $q.defer(); 
     AuthService.login().then(function (status){ 
      if(status === 'login'){ 
       defer.resolve(true); 
      }else if (status === 'register'){ 
       defer.resolve($state.target('map.register')); 
      } 
     }, function (msg){ 
      // Here is part that I am asking for 
      defer.resolve(false); 
     }); 

     return defer.promise; 
    }); 
}); 

ログインとユーザーがtransitionHookFnログインしていない必要があり状態に遷移が使用されている基本的には場合。私はAuthService.login()を使用し、ステータスの約束を返す。 AuthService.login()が失敗した場合(ユーザがキャンセルした場合)、約束は偽を返し、移行をキャンセルし、ユーザを彼と同じ状態にする。

問題は、最初のロード時に制限されたページにアクセスしようとしたときに始まり、以前の状態がなくページ全体が空白になっているためログインをキャンセルします。

前の状態がある場合に移行をキャンセルする方法はありますか?家にリダイレクトしない場合はどうすればよいですか?私は以前の状態にアクセスし、そこにいるかどうかを確認する必要があります。

trans.params().PARAM-NAME 

答えて

0

あなたはまた、あなたはまた、使用してここに stateParams良く使用 $transition$としてのparamsを使用することができます

app.run(function($transitions, SOME-SERVICE) { 
    $transitions.onSuccess({ to: 'SOME-STATE' }, function(trans) { 
     //Here you can call your service and based on conditions 
     //you can make transition to previous state by calling its name 
     //or to your default state 
     if(SOME-CONDITION){ 
      return trans.router.stateService.go('PREVIOUS-STATE'); 
     } else { 
      return trans.router.stateService.go('DEFAULT-STATE'); 
     } 
    }); 
}); 

注意を使用することができます

app.config(function($urlRouterProvider){ 
    $urlRouterProvider.otherwise('YOUR-HOME-STATE'); 
}); 

を使用することができますホームページにリダイレクトするには

関連する問題