@uirouterでAngularアプリがあります。たとえばユーザーなどに基づいて状態を動的にロードしたいとします。ユーザーが特定のグループに所属し、特定のメニュー項目をクリックしてフィーチャーにルーティングする場合、フィーチャー・モジュールの代替実装をロードしたいと考えています。angle-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');
}
}
}
これは、アプリに移行してから機能に移動すると問題なく動作します。また、ユーザーが機能ページにいないときにページを更新する機能もあります。 機能ページでユーザーが更新したときに機能しないという問題があります。機能バージョン2ではなく機能バージョン1が読み込まれます。しかし、他のページに移動してフィーチャーページに戻ると、フィーチャーバージョン2が再びロードされます。
stateRegistryの(de)レジスタ機能は、transitionService.onBefore内の単純なシナリオで機能しますが、一般的に(de)レジスタはここで使用するのに適していないと思いますか?または、私は状態リフレッシュコールのいくつかの並べ替えが不足している?
誰かがこの光を放つことができますか? stateRegistryの登録機能を使用するのはいつですか?