2016-12-17 78 views
0

我在從子組件路由時更新父組件時遇到了一些問題。我通過研究發現了這麼多,是否ngOnInit只會被調用一次,但是如何解決這個問題呢?我嘗試了不同的生命週期鉤子,但是我無法正確使用它們,或者根本不應該使用!有人可以幫忙嗎?謝謝!從子組件導航時更新父組件(角度)

我的路線:

{ 
    path: 'dashboard', 
    component: DashboardComponent, 
    children: [ 
     { 
      // when user is on dashboard component, no child component shown 
      path: '', 
     }, 

     { // detail component 
      path: ':table/:id', // 
      component: DetailComponent, 
     }, 
     //some more child routes and components... 
    ] 
} 

ngOnInit在儀表板構件(父)

ngOnInit() { 
    this.getSomething1(); // this populates an array 
    this.getSomething2(); // this populates an array 
} 

當用戶的動產從上面的陣列中的一個項目,用戶被路由到該項目的詳細信息頁面( DetailComponent)用戶可以在哪裏更新/刪除該項目。在子組件

方法,當用戶刪除的項目,用戶被路由到爲父級:

deleteItem(item: any) { 
    // some code... 
    this._router.navigate(['dashboard']); 
} 

所以一切工作正常,除了項目的數組沒有更新,因爲ngOnInit被稱爲一次。

所以我想運行方法getSomething1()getSomething2()當用戶從子組件DetailComponent路由回DashboardComponent

感謝您的幫助!

回答

3

解決此問題的方法是使用主題。

在DashboardComponent你可以聲明一個主題:

public static returned: Subject<any> = new Subject(); 

和訂閱它:

constructor() { 
     DashboardComponent.returned.subscribe(res => { 
     this.getSomething1(); // this populates an array 
     this.getSomething2(); 
     }); 
    } 

在DetailComponent,刪除項目後,您撥打的主題下:

deleteItem(item: any) { 
    // some code... 
    DashboardComponent.returned.next(false); 
    this._router.navigate(['dashboard']); 
} 
+0

謝謝,這個作品很有魅力!只需將'DetailComponent.returned.next(false)'改爲'DashboardComponent.returned.next(false)',我將接受答案! :)感謝一堆! – Alex

+0

不用擔心@ASomeOneJ!只是改變了錯誤。 –

相關問題