Angular Router イベント: NavigationEnd -- 最後のイベントのみをフィルターする方法 質問する

Angular Router イベント: NavigationEnd -- 最後のイベントのみをフィルターする方法 質問する

抽出したいNavigationEnd タイプの最後のイベントエントリのみrouter.events から。しかし、どういうわけか、これを行う適切な方法が見つかりません。何を試しても、次のコード スニップが、これらの対象オブジェクトにアクセスする唯一の方法です。

let ne: any;

router.events.filter(e => e instanceof NavigationEnd)
   .forEach(e => {
      ne = e as NavigationEnd;                 
   });

console.log('target page: ', ne.urlAfterRedirects);

しかし、.forEach() を使ってすべてのエントリを実行し、最後のエントリを使用する必要があるのでしょうか? イベントを一種の配列として処理して、次のようにするより良い方法はないでしょうか?

ne = arrayOfEvents[arrayOfEvents.length-1]

?

私はそれについて夢中になっていますが、木を見て森を見ていないようです...

ベストアンサー1

PS. フィルタリングには、インスタンスオブタイプガードすると、再度アサートしなくても適切な型が取得されます。

this.firstChildData$ = this.router.events.pipe(
  filter((e): e is NavigationEnd => e instanceof NavigationEnd),
  map(e => {
    // e is now NavigationEnd
  })
);

ここに画像の説明を入力してください

おすすめ記事