不相關的元件
唯一的方法是,如果你的元件沒有父子關係(或者是相關的,但是太大了,例如盛大的大兒子),那就是有一種訊號,一個元件訂閱,另一個寫入。
這些是任何事件系統的 2 個基本操作: 訂閱/監聽要通知的事件,並傳送/觸發/釋出/分派事件以通知想要的事件。
至少有 3 種模式可以做到這一點。你可以在這裡找到一個比較 。
這是一個簡短的總結:
-
模式 1: 事件發射器/目標/排程器 :偵聽器需要引用要訂閱的源。
- 訂閱:
otherObject.addEventListener('click', () => { alert('click!'); });
- 派遣:
this.dispatchEvent('click');
- 訂閱:
-
模式 2: 釋出/訂閱 :你不需要對觸發事件的源的特定引用,可以在任何處理所有事件的地方訪問全域性物件。
- 訂閱:
globalBroadcaster.subscribe('click', () => { alert('click!'); });
- 派遣:
globalBroadcaster.publish('click');
- 訂閱:
-
模式 3: 訊號 :類似於事件發射器/目標/排程器,但你不在此處使用任何隨機字串。可以發出事件的每個物件都需要具有該名稱的特定屬性。這樣,你就可以準確地知道物件可以發出什麼事件。
- 訂閱:
otherObject.clicked.add( () => { alert('click'); });
- 傳送:
this.clicked.dispatch();
- 訂閱: