私の問題は、routerTransition を使用しているページがいくつかあることです。これは、(query(...)
メソッドを使用して) いくつかの場所で見つけることができるためです。問題は、コンポーネントがブラウザの戻るボタンを押して出入りするときに、別のアニメーションが必要なことです。もう少し詳しく言うと:
- 通常のナビゲーションでは、私のコンポーネントは右から左に入る必要があります
- 後方ナビゲーションでは、コンポーネントは左から右に入る必要があります
離れる場合はその逆です。
ルーターイベントで、それが前方または後方のナビゲーションであるかどうかを何らかの方法で検出できれば、これを簡単に行うことができますが、ルートにさらにデータを追加しない限り、これを検出する方法を見つけることができませんでした.
編集:
@Vegaが言及したようなことをしようとしましたが、それについてのスニペットを貼り付けました。
テンプレート:
<div class="root" [@routerTransition]="navigationState$ | async"
(@routerTransition.done)="onDone($event)">
<sdx-router-outlet [size]="currentSize"></sdx-router-outlet>
</div>
コード:
this.navigationState$ = this._actions$.ofType(ActionTypes.GO_BACK)
.map(() => {
return { isGoingBack: true };
})
.merge(this._actions$.ofType(ActionTypes.GO_FORWARD).map(() => { return { isGoingBack: false }; }))
.map((navigation: Navigation) => navigation.isGoingBack ? 'backward' : 'forward')
.merge(this._resetNavigationState);
public onDone(event) {
// This is just to reset to a state where I can trigger my animation again
this._resetNavigationState.next('initial');
}
ここでのアイデアは、トランジション トリガーをforward
前方に移動するbackward
ときと後方に移動するときに設定するというものでした。ただし、(少なくともこれが原因だと思います)後方設定は基本的にng-locationサービスから「来る」ため、ルーターがナビゲートを開始する前に状態が設定され、トリガーがあったためアニメーションはありませんルーターアウトレットによってコンポーネントを取り付けたり取り外したりする前に発生します。
ご覧のとおり、ngrx を使用していますが、それは重要ではないと思います。2 つのタイプは、基本的に 2 つの Observable だけです。そのうちの 1 つは、@Vega が言ったように、戻るボタンを押して起動した場合、もう 1 つはカスタム ルーターで起動し (今のところ)、navigateByUrl メソッドをオーバーライドし、その中で Forward アクションをディスパッチして、スーパーを呼び出します。
私が言及しなかったのは、アニメーションはすべて同じであるため、ロードするコンポーネントにアニメーションを配置したくないということです。そして、「デフォルト」のアニメーションのようにすれば、いくつかのコンポーネントを付け忘れることを恐れる必要はありません。