Как запустить маршрутный символ, если параметр url неверен?
В 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