はNavigationStart
イベントにtrue
に設定されますとNavigationEnd
イベントにfalse
に設定されますブール型プロパティを作成することです。そうすれば、ルートナビゲーションが終了した場合にのみダイアログを開くことができます。ここで私はいくつかの段階で問題を回避し得た方法である:
1.Iは私prompt.service.ts
2.ThenでinNavigation
と呼ばれるブール値を作成し、サービスのコンストラクタで、私は、ナビゲーションイベントに加入し、それに応じてinNavigation
を設定しました:
public open(entity: any): Observable<boolean> {
if (this.inNavigation == false) {
let dialogRef: MdDialogRef<PromptComponent>;
dialogRef = this.dialog.open(PromptComponent);
dialogRef.componentInstance.entity = entity;
return dialogRef.afterClosed();
}
}
:
constructor(private dialog: MdDialog, public router: Router) {
this.router.events.subscribe(event => {
if (event instanceof NavigationStart) {
this.inNavigation = true;
} else if (event instanceof NavigationEnd) {
this.inNavigation = false;
}
});
}
3.Then私は、プロンプトダイアログを開く必要がある場合は、ブールプロパティをチェックすることを使用
私はすべての単一のコンポーネントを変更する必要はありませんし、私はまだ私が欲しかったものを達成するために、よりシンプルなものを使用することができますので、私は、迅速なサービスでは、このすべてを置く:
ngOnDestroy(): void {
this.promptService.open(this);
}
一つの方法は、ルータに耳を傾けることであろうあなたがrouterNavigationStartイベントを受け取った場合、ルーティングが進行中であることを知っている –
私は基本的にそのようなことをした、私は答えとしてすべてを投稿します。正しい方向に私を指してくれてありがとう! – DGarvanski