2017-08-09 31 views
1

我有獲取材料選項卡中創建一個子窗體組件:我使用ngOnDestroy顯示一個對話框材料,如果用戶要保存時詢問檢查ngOnDestroy被稱爲上的路線變化

<md-tab *ngFor="let selectedEntity of selectedEntities; let i=index"> 
    <template md-tab-label>{{selectedEntity.resource.name}} 
     <i class="fa fa-times" (click)="onTabClose(i)"></i> 
    </template> 
    <child-form [entity]="selectedEntity"></child-form> 
</md-tab> 

關閉標籤。

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

然而,由於當前狀態保存在一個服務,我並不需要顯示的提示,當用戶改變路線,只有當他們關閉一個標籤。

我可以(如果有的話,如何我可以)檢查路線更改是否導致子組件被銷燬?

+1

一個辦法是聽路由器事件,如果你收到routerNavigationStart事件知道路由正在進行 –

+0

我基本上做了這樣的事情,我會發布整個事情作爲答案。感謝您指點我正確的方向! – DGarvanski

回答

1

我設法在這裏做的是創建一個被設置爲trueNavigationStart事件被設置爲falseNavigationEnd事件的布爾屬性。這樣我只有在路線導航結束後才能打開對話框。下面是我解決該問題如何得到幾個步驟:

1.I我prompt.service.ts

2.然後創建了一個名爲inNavigation布爾,在服務的構造,我訂閱了導航的活動,並設置相應inNavigation

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我用布爾屬性來檢查我是否應該打開提示對話框:

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(); 
    } 
    } 

我把所有這一切都在迅速的服務,因爲我不會有改變每一個組成部分,我仍然可以使用一些更簡單的實現我想要的東西:

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