使用Lightning Message Service(Message Channel)在Lightning页面内可以跨DOM进行通信。在同一 Lightning Page的Visualforce页面、Aura组件和Lightning web Component之间进行通信。订阅者也可以选择组件是从整个应用程序订阅消息,还是仅从活动区域订阅消息。

如果系统从Salesforce Classic切换到Lightning Experience,可以通过 lightning message service构建lwc实现与现有Visualforce页面或Aura组件通信。

message channel可以进行三部分执行: 创建/ 发布/ 订阅。

一. 创建Message Channel

目前Message Channel不像表字段创建一样,拥有可视化操作,需要使用LightningMessageChannel的metadata type来创建Message Channel。我们以VS Code为例。需要创建 messageChannels目录,并且创建一个后缀为 .messageChannel-meta.xml的文件。

Untitled

我们以demo中的 FiltersChange.messageChannel-meta.xml为例。此demo其他的场景也可以直接赋值粘贴然后进行一个快速的修改。lightning message channel包括以下的几部分构成:

<?xml version="1.0" encoding="UTF-8"?>
<LightningMessageChannel xmlns="<http://soap.sforce.com/2006/04/metadata>">
    <isExposed>true</isExposed>
    <lightningMessageFields>
        <description>Search Key</description>
        <fieldName>searchKey</fieldName>
    </lightningMessageFields>
    <lightningMessageFields>
        <description>Max Price</description>
        <fieldName>maxPrice</fieldName>
    </lightningMessageFields>
    <lightningMessageFields>
        <description>Minimum number of Bedrooms</description>
        <fieldName>minBedrooms</fieldName>
    </lightningMessageFields>
    <lightningMessageFields>
        <description>Minimum number of Bathrooms</description>
        <fieldName>minBathrooms</fieldName>
    </lightningMessageFields>
    <masterLabel>Filters Change Message Channel</masterLabel>
</LightningMessageChannel>

创建以后,当前文件右键deploy即可。

Untitled

二. 发布Message Channel

发布 Message Channel很简单,遵循三个步骤即可:

  1. 头部引入publish以及MessageContext → import { publish,``MessageContext} from 'lightning/messageService';
  2. 装载messageContext

@wire(MessageContext) messageContext;

  1. 调用publish方法。其中有三个参数:第一个参数是messageContext;第二个参数是MessageChannel名称;第三个参数是messageChannel定义的形参。