2017-04-04 50 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()失敗(用戶取消),promise將返回false並取消轉換,從而使用戶處於與原來位置相同的狀態。

當用戶嘗試訪問首次加載時的受限頁面並取消登錄時,問題開始,因爲沒有以前的狀態,整個頁面只是空白。

有沒有辦法取消過渡,如果有以前的狀態,如果沒有,然後重定向到家?我需要訪問以前的狀態,看看它是否存在。

回答

0

重定向到主頁,你可以使用

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

您還可以使用

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

請注意,您還可以使用stateParams更好地用作$transition$這裏PARAMS使用:

trans.params().PARAM-NAME