课程章节介绍
同学们,咱们今天来聊聊 Lightning Message Service,也就是闪电消息服务。它是 Lightning Experience 和 Experience Builder 里,让不同组件能够互相通信的一套标准机制,就像组件之间一条公共的“消息高速公路”。
首先,这条消息高速公路很包容,不仅咱们的闪电 Web 组件(LWC)能用,像 Aura、Visualforce 这样的旧技术也能用,甚至实用程序栏里的工具、Open CTI 电话集成,都可以在这条路上收发消息。
那么消息具体是在哪条“车道”上跑呢?我们需要在项目里创建一个 messageChannels 文件夹,在里面定义一个消息通道,这是一个 LightningMessageChannel 类型的元数据文件。然后在我们的 LWC 组件中,通过 `@salesforce/messageChannel` 这个导入路径,把通道引进来。通道的名字必须按 `频道名称__c` 这种格式写,注意结尾有个双下划线和小写 c,虽然看起来像自定义对象,但它真的不是,只是一个命名约定。如果你是在托管包里使用,通道名字前面还要加上你的命名空间,像这样:`命名空间__频道名称__c`。
接下来是作用域,也就是你能在多大范围内收得到消息。这里有两个选项:如果你在订阅时指定了 `APPLICATION_SCOPE`,也就是应用程序作用域,那你的组件就能从应用程序的任何一个角落收到这条消息。反过来,如果你省略作用域,也就是采用默认设置,那么消息就会被限制在“活动区域”内。什么是活动区域?就是你当前正在看的导航选项卡、控制台选项卡、子选项卡,还有始终处于活动状态的实用程序栏。记住,实用程序栏里的东西永远是活的,所以它永远属于活动区域。
要注意,这个作用域的功能只在 LWC 组件里使用 `@wire` 去获取消息上下文、然后调用订阅方法时才生效。你需要在 JavaScript 文件里用 `@wire(MessageContext)` 先拿到上下文,再配合 `subscribe` 方法来设置作用域。在 Aura 等其他地方用法会稍有不同,但在咱们这张幻灯片里,主要强调的是 LWC 中 `@wire` 与作用域的关系。
总结一下,Lightning Message Service 就是跨技术栈的通信利器,用消息通道定义规则,通过 `__c` 后缀来导入,再用作用域来控制消息的收听范围,清晰又灵活。好,这一小节我们就讲到这里。
关键词
LWC
Lightning Web Components
Salesforce