不相關的元件

唯一的方法是,如果你的元件沒有父子關係(或者是相關的,但是太大了,例如盛大的大兒子),那就是有一種訊號,一個元件訂閱,另一個寫入。

這些是任何事件系統的 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();