後に動作を停止しdocumentationで提案されているように、私はルートに提供されるユーザーIDに基づいて、再使用部品が、スイッチにparamMapを使用しています:アンギュラルートparamMap switchMapは私のコンポーネントのngOnInitで404
this.route.paramMap
.switchMap((params: ParamMap) => {
this.errors = false;
this.busy = true;
return this.userService.getUser(params.get('id'));
})
.subscribe((user) => {
this.busy = false;
this.errors = false;
// do something with user object...
}, (error) => {
this.busy = false;
this.errors = true;
if (error.status === 404) {
this.errorMsg = 'User not found';
}
});
ただし、userService.getUser()メソッドが404エラーをスローすると、.switchMap()はルートパラメータが変更されたときに発火を停止し、たとえば新しいユーザーIDに戻ります。私はサービスとコンポーネントの両方に.catch()を投げ込もうとしましたが、効果がないようですが、404の後にはまだ動作しなくなります。これについては間違っていますか?
残念ながら、これは私のためには機能しません。 .switchMap関数にconsole.logステートメントがありましたが、これはもう起動しません。 – Drew
代わりにNavigationStartイベントを試しましたか? if文の前にコンソールロギングを試してください。ルータがキャンセルされているか、エラーがあった場合にアイデアを得るでしょう。これが助けてくれることを願っています – fastAsTortoise