0

Angular 6 では、Observable を使用して、次のように URL パラメータに基づいて詳細レコードのフェッチを管理しています。

ngOnInit() {
  this.hero$ = this.route.paramMap.pipe(
    switchMap((params: ParamMap) => {
      const id = parseInt(params.get('id'), 10);
      if (!id) {
        throw new Error('Hero id invalid.');
      }
      return this.service.getHeroById(id);
    }),
    catchError(err => {
      this.router.navigate(['/pageNotFound'], {skipLocationChange: true});
      return throwError(err);
    }),
  );
}

catchError パイプでは、存在しない URL に移動しているだけなので、ワイルドカード ルートがトリガーされ、PageNotFoundComponent が表示されます。それは本当に複雑に思えますが、ルーターにそのコンポーネントを表示させる方法が他にわかりません。より良い方法はありますか?

これは私のセットアップのデモです: https://stackblitz.com/edit/angular-router-not-found?file=src%2Fapp%2Fhero%2Fhero-detail.component.ts

4

0 に答える 0