我有一個帶有@uirouter的Angular應用程序。我想根據用戶動態加載狀態,例如如果用戶位於特定組中,然後單擊指向特徵的特定菜單項,那麼我想加載特徵模塊的替代實現。angular-ui-router運行狀態
州名將是相同的,所以我已經嘗試使用uiRouter.stateRegistry.deregister和uiRouter.stateRegistry.register來處理此問題。我在用戶登錄時進行相關調用,從登錄過渡到應用程序(因爲我需要知道用戶憑據) - 因爲我使用的是uiRouter.transitionService.onBefore。所以,代碼大致是:
uiRouter.transitionService.onBefore({}, transition => loginTransition(uiRouter, injector, transition));
const isLogin = transition => transition.from().name === 'login' && transition.to().name === 'main';
const isRefresh = transition => transition.from().url === '^';
const loginTransition = (uiRouter: UIRouter, injector: Injector, transition: Transition) => {
if(isLogin(transition) || isRefresh(transition)) {
if(injector.get('authService').getUser() === 'specificUser') {
uiRouter.stateRegistry.deregister('feature-version-1');
uiRouter.stateRegistry.register('feature-version-2');
}
}
}
這個過渡到應用程序時,然後導航到功能工作正常。當用戶不在功能頁面上時,它也適用於頁面刷新。 問題是,當用戶在功能頁上刷新時,它不起作用 - 然後功能版本-1加載而不是功能版本-2。但是,在導航到其他頁面並返回到功能頁面時,功能版本-2會再次加載。
這種行爲讓我覺得,雖然(DE)註冊stateRegistry的功能在簡單的場景裏面工作transitionService.onBefore,一般採用的(de)寄存器不適合用在這裏?或者,也許我錯過了某種狀態刷新調用?
有人可以在這一點上點亮嗎?什麼時候最好使用stateRegistry的(de)註冊功能?