应用间通信
通过window.postMessage
以切换主题这个场景为例
在框架应用发送事件
window.targetWindow.postMessage({
appId: 'godzillaPro',
type: 'switchTheme',
theme: 'dark',
}, '*');
在子应用中响应事件
window.addEventListener(
'message',
event => {
const { appId, type } = event.data;
if (appId) {
if (type === 'switchTheme') {
// 相应主题切换
}
},
false
);
通过msgCenter
msgCenter这种方式仅支持Godzilla 微应用
子应用A发送事件
import { msgCenter } from '@gza/quantex-utils';
msgCenter.publish('something-changed', {a:1}); // 第二个参数可以携带数据的
msgCenter.publish('something-changed', {a:1}, 'godzillaPro'); // 第三个参数可以指定appId
子应用B接收事件
this.token = msgCenter.subscribe('something-changed', (topic, data) => {
console.log(data);
});
// 取消订阅,特别重要,否则可能会造成内存泄露,甚至影响功能
msgCenter.unsubscribe(this.token);