提供されたパラメーターに基づいて、ngOnInit()、ngAfterViewInit() などのフックの 1 つから新しいコンポーネントにリダイレクトしようとしています。ルーターのナビゲート行がヒットすると、現在のコンポーネントが複数回実行されます。
働いた解決策:
setTimeout(() -> { this.router.navigate(link)); //recently upgraded angular 3 to 4.0.0 router
メインモジュール:
RouterModule.forChild([
{ path: 'referrer/:vehicle/:referrer', component: ReferrerComponent },
{ path: 'referrer/:referrer', component: ReferrerComponent },
{ path: 'vehicle', component: vehicleComponent},
])
ルート: http://localhost:4200/#/referrer/vehicle1/referrer1
リファラー コンポーネント:
ngOnInit() {
this.routeObservable = this.route.params.subscribe((params) => {
if(params["referrer"]) { // do referrer stuff;}
if(params["vehicle"] == "vehicle1") {
this.router.navigate('/vehicle'); //redirect to vehicle component
}
});
}
これは、リダイレクトが実際に発生した場合にのみ発生するため、re route (ライフサイクル) を正確にどこに配置すればよいかわかりません。