不相关的组件

唯一的方法是,如果你的组件没有父子关系(或者是相关的,但是太大了,例如盛大的大儿子),那就是有一种信号,一个组件订阅,另一个写入。

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