2017-08-03 68 views
1

我正在尋找兩個兄弟之間angular4組件之間的通信。通過在服務中持有組件參考在angular4兄弟組件之間進行通信

我讀過這個文檔:https://angular.io/guide/component-interaction但我在想一個解決方案,一個服務持有一個組件(需要訪問)引用。

A service保持對Second組件的引用。 First組件使用service訪問Second組件引用並執行其中的任何方法。

該解決方案允許同步執行方法。

這裏有一個工作plunker: https://embed.plnkr.co/NkPB09wuk0F4xG7BFIcM/

我的問題是關於這個代碼的設計。

它不是實際上是一個循環依賴不推薦?或者這可能是兄弟姐妹組件之間通信的合理解決方案?

回答

0

您應該以鬆散耦合的方式安排組件之間的通信。但是你的代碼緊密耦合。您的服務知道確切地說有兩個組件。如果您需要引入需要相同服務的第三個組件,該怎麼辦?根據你的搶劫者,你需要修改服務。

該服務不應該知道誰在使用其數據。在服務器內創建Subject的實例,並讓第一個組件調用此Subject的next()。第二個組件可以訂閱這個主題。如果第三個組件需要這些數據,第三個組件可以訂閱相同的主題,並且不需要更新服務的代碼。我錄製了一段視頻,演示如何安排這種組件間通信:https://www.youtube.com/watch?v=NYNEH_k0e_4

+0

我熟悉並且與主體模式。接下來是異步。如果我需要等待第二個組件會結束它需要做的事情呢?我需要有另一個主題,然後從第二個組件調用。這有點麻煩。 – ohadinho

+0

「如果您需要引入第三個需要相同服務的組件,該怎麼辦?根據您的服務器,您需要修改服務。」 - 沒有。第三項服務只需要從全球注射器中獲取參考信息,就是這樣,您的解決方案僅在共享數據的情況下才會涉及 – ohadinho

0

我同意雅科夫的看法,認爲這似乎不是一種好的做法。

但是,而不是一個Subject或BehaviorSubject,我建議只是一個簡單的服務。我這裏有一個例子:https://blogs.msmvps.com/deborahk/build-a-simple-angular-service-to-share-data/

我更新了plunker來說明:https://plnkr.co/edit/RyHJgzZLBUlxj15jLGAt?p=preview

import { Injectable } from '@angular/core'; 

@Injectable() 
export class GlobalCommunicator { 
    private message: string; 
} 
+0

。如果我想觸發行動呢? – ohadinho

+0

你能舉個例子嗎? – DeborahK

+0

假設第二個組件想要觸發一些第一個組件方法(同步) – ohadinho

相關問題