跳到主要内容

应用间通讯

简介

通过 @giteeteam/plugin-sdk 这个包可以实现应用间通信,包括 Iframe、qiankun。

SDK 注册

在主应用中初始化 ProximaSDKServer,在微前端子应用初始化时创建 ProximaSDK,注册到 ProximaSDKServer 后,将 sdk 在参数中传入子应用。

ProximaSDKServer

通讯 服务端 ,目前在 proxima-app 中,初始化了 ProximaSDKServer,子应用可通过通讯方式打开父应用的组件(每次新增调用组件都要父应用修改),目前只支持打开卡片组件。

  • new ProximaSDKServer({registerTimeout}) 初始化后,会监听全局的 message

ProximaSDK

通讯 客户端 ,在 proxima-app 中使用@giteeteam/plugin-loader 初始化微前端子应用时,创建 ProximaSDK,注册到 ProximaSDKServer 后,将 sdk 在参数中传入子应用。

  • new ProximaSDK(server) 初始化时传入 ProximaSDKServer

register

register({type, module, instance, context, frame}): Promise<void>

注册子应用,用于应用间通讯,等待子应用实例化完 ProximaSDK,Promise 就会返回

  • type: iframe | micro
  • module: 模块名
  • instance: 客户端 ProximaSDK 实例
  • micro 是 sdk,iframe 是 frameRef
  • context: 上下文, frame: 当前页面信息
  • 参考示例:
// 主应用注册子应用,proxima-app中使用@giteeteam/plugin-loader注册微前端
const { ProximaSDKServer, ProximaSDK } = require('@giteeteam/plugin-sdk');
const server = new ProximaSDKServer();
const client = new ProximaSDK({ sdkServer: server });
await server.register({
type: 'micro',
module: moduleKey,
instance: client,
frame: qiankunProps.frame,
context: qiankunProps.context || {},
});
// 应用sdk初始化
import { ProximaSDK } from '@giteeteam/plugin-sdk';

if (!window.__POWERED_BY_QIANKUN__) {
const sdk = new ProximaSDK({ sdkServer: window.parent });
render({ sdk });
}

应用间通信

sendAction

sendAction(actionType, param) 发送动作信息,目前用于打开卡片组件

  • 示例
// 父应用 监听行动事件
sdkServer.onAction = (message, callbacks) => {
const { action, param } = message.payload;
switch (action) {
case 'openIssuePanel':
setSelectedItemId(param.issue);
setVisibleViewModal(true);
callbacks.resolve();
break;
}
};

// 子应用打开父应用卡片组件(微前端初始化的时候sdk已传入,iframe)
sdk.sendAction('openIssuePanel', { issue: 11223 }).then(() => {
console.log('open item success');
});