2017-04-25 49 views
1

我最近從UI-Router v0.4.2升級到v1.0.0 RC1。登錄後重定向回原始狀態 - 帶參數

我用$ rootScope工作。在$(「$ stateChangeStart」,函數(..捕捉necesary數據要能回重定向到原來的頁面請求的用戶登錄後。

自從升級到v1.0.0以來,我一直在努力尋找一些可行的方法。獲取狀態名稱本身就有點麻煩,但實際上獲取url參數是另一回事。

我已閱讀Docs and API info about the injectables and Transitions and States。Sample App似乎只針對基本的重定向(僅基於州名)

顯然,我錯過了一些東西。 請注意,參數可以有所不同。

$transitions.onBefore({ 
    to: function (state) { 
     return globals.anonymousStates.indexOf(state.name) == -1; 
    } 
}, function (transition) { 
    return LoginService.isAuthenticatedV2(transition, "account.login"); 
}); 

globals.anonymousStates包含狀態(字符串)不需要認證(目前兩頁:account.login,account.forgotpassword)的列表。

LoginService.isAuthenticatedV2包含以下代碼:

loginService.isAuthenticatedV2 = function (trans, redirectTo) { 

     return $http.get('/Account/IsAuthenticated').then(function (result) { 

      if (result.data.authenticated === true) { 
       return trans; 
      } else { 
       return trans.router.stateService.target(redirectTo); 
      } 
     }, function (error) { 
      return trans.router.stateService.target(redirectTo); 
     }) 
    } 

簡而言之:當用戶直接針對需要身份驗證的URL,他被重定向到account.login狀態。登錄後,我想將他重定向到原始請求,包括所有url參數(一個id,類型,搜索,...)

示例url:www.dummy.com/customer?id=007 &類型=債券&搜索=詹姆斯

任何人都可以提供一些關於如何解決這個問題的幫助?

編輯 我試圖獲得最後的「有效」狀態就是這樣,得到名稱,如能正常工作(如預期),但抓住了params爲不工作。

// copy the last valid redirectable state to the global service. 
$transitions.onBefore({ 
    to: function (state) { 
     if (globals.anonymousStates.indexOf(state.name) == -1) { 
      globals.lastValidState = angular.copy(state); 
     } 
     return false; 
    } 
}, angular.noop); 

回答

0

原來,它只是「transition.params()」來獲得當前轉換的所有參數。