学习目标
完成本单元后,您将能够:
- 描述两种编程模型在事件上的差异。
- 将事件从Lightning Web组件发送到Aura组件。
单独隔离的组件可能很有用,但是当组件开始相互交谈时,真正的应用程序魔术就会发生。这就是事件的源头。使用事件在组件之间进行通信是Web标准,而事件对于Aura组件和Lightning Web组件中的通信都是至关重要的。
组件事件成为DOM事件
将Aura组件中的组件事件迁移到Lightning Web组件中的Web标准DOM事件。如果您熟悉DOM事件,则会在Lightning Web组件中注意到相同的传播行为。
创建和发送事件
代替专有 事件 Aura组件中的对象,请使用 事件 要么 CustomEvent标准DOM接口。我们强烈建议您使用CustomEvent界面,因为这样可以提供更一致的体验。该框架可能需要修补事件的属性和方法,以规范浏览器之间的实现,并使用CustomEvent保证您的组件被覆盖。Internet Explorer不支持CustomEvent 接口本身,但Lightning Web组件模型增加了对此的支持。
Lightning Web组件中没有等效的 <aura:registerEvent>在Aura组件标记中标记,以注册组件可以触发事件。由于使用了标准的DOM事件,因此不需要额外的仪式。
代替 event.fire() 在Aura组件中,使用标准DOM方法, this.dispatchEvent(myEvent),在Lightning Web组件中。
这是在广告素材中创建和分配(触发)事件的示例 propertyTile 闪电网络组件。
中的第一个参数 CustomEvent() 构造函数将事件的名称设置为 已选。
第二个参数是配置事件行为的对象。在此对象中,我们将详情,这是事件的数据有效负载。处理组件可以读取数据。在这种情况下,我们通过了this.property.Id 值。
处理事件
Aura组件使用 <光环:处理程序>在标记中标记以定义处理程序。另外,一个组件可以在其标记中引用另一个组件时声明一个处理程序动作。
此光环组件使用 c:孩子 在其标记中并声明一个 handleNotification 通知事件的处理程序 c:孩子 火灾。
Lightning Web组件可以类似地具有声明性处理程序。声明处理程序中的事件名称以前缀上。
的 handleNotification 事件处理函数在组件的JavaScript文件中定义。
在Lightning Web组件中,您还可以使用标准程序以编程方式设置处理程序 addEventListener() 组件的JavaScript文件中的方法。
让我们看看DreamHouse应用程序如何处理在 propertyTile闪电网络组件。的propertyTileList Lightning Web组件在其HTML文件中处理此事件。
的 已选 事件名称以开头 上 在由配置的声明处理程序中 onselected = {onPropertySelected}。
的 onPropertySelected事件处理程序函数在propertyTileList.js中定义。
让您回想起我们开除 已选 事件发生 propertyTile。的CustomEvent() 构造函数集 详情 至 this.property.Id。处理程序通过访问以下事件来解压缩事件数据事件细节。在此示例中,我们获得事件细节。
我们解释发生了什么事 pubsub.fire() 接下来我们来看应用程序事件。
应用程序事件成为发布-订阅模式
将Aura组件中的应用程序事件迁移到Lightning Web组件中的发布-订阅(发布-订阅)模式。在发布-订阅模式中,一个组件发布一个事件,其他组件订阅以接收和处理该事件。订阅该事件的每个组件都会接收该事件。
标准DOM事件应该始终是您选择事件的首选,因为它们只会沿安全壳层次结构传播,从而使行为更加可预测。应用程序事件在复杂的应用程序中可能会出现问题,因为任何组件都可以处理该事件。由于组件的意外耦合,这种模式可能导致难以维护的代码。但是,有时您需要包含层次结构中的同级组件进行通信。Lightning页面或Lightning App Builder中使用的不相关组件是需要通信的同级组件的示例。在这些情况下,pub-sub模式是必经之路。
DreamHouse应用程序使用pubsub.js模块。随时复制pubsub 模块并在您的代码中使用它。
的 pubsub 模块导出三种方法。
- 寄存器
- 注册事件的回调。
- 取消注册
- 注销事件的回调。
- 火
- 向侦听器触发一个事件。
将事件发送到封闭的Aura组件
闪电Web组件调度DOM事件。封闭的Aura组件可以监听这些事件,就像封闭的Lightning Web组件一样。封闭的Aura组件可以捕获事件并进行处理。(可选)Aura组件可以触发Aura事件,以与其他Aura组件或与应用程序容器进行通信。
当您要支持Aura组件中使用但Lightning Web组件当前不支持的事件或接口时,此技术很有用。
以下示例说明了此技术。此Lightning Web组件触发自定义 通知 JavaScript文件中的事件。
封闭的Aura组件包装器为自定义事件添加了处理程序。请注意,事件处理程序通知,将事件名称与 上以它为前缀。即使用通知 处理名为 通知。
的 handleCustomEvent 在控制器的功能 catchAndReleaseWrapper Aura组件处理事件。
Lightning Web组件调度的通知事件设置事件详细信息。
处理事件的Aura组件使用以下命令访问事件数据 evt.getParam(’message’)。
您可以根据需要处理事件。您可以选择触发一个新的Aura事件,以与其他Aura组件进行通信。