2017-08-09 8 views
1

で呼び出された場合、私は材料のタブで作成された子フォームのコンポーネントを持っていますタブを閉じます。現在の状態がサービスに保存されているのでチェックngOnDestroyがルート変更

ngOnDestroy(): void { 
    this.promptService.open(this); 
    }; 

しかし、私は彼らが、タブを閉じたときにのみ、ユーザーがルートを変更したときに、プロンプトを表示する必要はありません。

私は(もしそうならば)どうすればルート変更によって子コンポーネントが破壊されているかどうか確認できますか?私はここで行うことをどうにか何

+1

一つの方法は、ルータに耳を傾けることであろうあなたがrouterNavigationStartイベントを受け取った場合、ルーティングが進行中であることを知っている –

+0

私は基本的にそのようなことをした、私は答えとしてすべてを投稿します。正しい方向に私を指してくれてありがとう! – DGarvanski

答えて

1

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); 
    } 
関連する問題