2017-09-14 33 views
3

我想在另一個組件中的某個活動之後對一個組件進行更改。這些組件沒有父/子關係。請告訴我正確的解決方案如何在一個組件中觸發通知事件並在Angular 4中監聽另一個組件(組件沒有父/子關係)

+3

如果您沒有父子關係,您可以使用共享服務將事件從一個發送到另一個 – JayDeeEss

+0

謝謝!請給我一個簡單的例子來說明清楚。這會有很大的幫助。 –

+0

@ParitaPatel檢查此鏈接。 https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service 此外,請參閱此答案。 https://stackoverflow.com/a/44064843/5476757 –

回答

1

您可以使用私人主題和公共可觀察物創建雙向流的共享服務。這兩個組件都可以訂閱這些觀察值,其中可以推送新的值,而其他參數可以根據新的值更改進行反應。

Official docs!

組件在plunker沒有任何父子關係。

Working Plunker

@Injectable() 
export class MissionService { 

    // Observable string sources 
    private missionAnnouncedSource = new Subject<string>(); 
    private missionConfirmedSource = new Subject<string>(); 

    // Observable string streams 
    missionAnnounced$ = this.missionAnnouncedSource.asObservable(); 
    missionConfirmed$ = this.missionConfirmedSource.asObservable(); 

    // Service message commands 
    announceMission(mission: string) { 
    this.missionAnnouncedSource.next(mission); 
    } 

    confirmMission(astronaut: string) { 
    this.missionConfirmedSource.next(astronaut); 
    } 
} 
+0

感謝您的參考。我嘗試並根據之前關於共享服務的評論開發了一個解決方案,並且工作正常。謝謝! –

0

一些其他好的方法來更新根據其他成分變化的成分:

  1. 如果同時共享同一個家長,您可以輸出的變化給父父將更新其他子組件(更新輸入)。
  2. 您可以使用共享存儲(例如ng-redux)。
  3. 作爲查詢參數使用某種UI路由器(取決於用例)。
相關問題