【微服务】前端微服务qiankun 2.x主子应用通信代码片段

主应用代码

主应用工程里面源代码新建qiankun/index.js,通信代码如下:

import { initGlobalState } from "qiankun";
import store from '@/store'

// 主应用与微应用数据通信
const state = {
  subappClassName: '' // 设置子应用打包根的class类名
}
const actions = initGlobalState(state);

actions.setGlobalState(state);

actions.onGlobalStateChange((state, prev) => {
  const { subappClassName } = state;
  store.dispatch('setSubappClassName',subappClassName);
  
})
export {
  actions
};

在主应用实例里面调用方式:

<script>
import actions from '@/qiankun'// 导入actions实例
export default {
  created() {
    actions.setGlobalState({subappClassName: 'subapp'}); // 通过setGlobalState改变全局状态
  }
}
</script>

子应用代码

在子应用源代码utils/qiankun.js添加如下代码:

class Actions {
  static empty() {
    console.warn('current actions is empty!')
  }

  actions = {
    onGlobalStateChange: Actions.empty,
    setGlobalState: Actions.empty
  }

  /** 初始化设置actions
   *
   */
  setActions(actions) {
    this.actions = actions;
  }

  onGlobalStateChange(...args) {
    return this.actions.onGlobalStateChange(...args);
  }

  setGlobalState(...args) {
    return this.actions.setGlobalState(...args);
  }
}

export default new Actions();

在main.js入口文件引入actions实例,并在mount生命周期中导入该实例,代码如下:

import actions from '@/utils/qiankun';
export async function mount(props) {
  actions.setActions(props);
  actions.setGlobalState({ subappClassName: 'sub-root-app' }); // 可在mount中设置,也可在实例里设置
  render(props);
}

在vue路由页面调用:

<script>
import actions from '@/utils/qiankun.js';
export default {
  created() {
    actions.setGlobalState({subappClassName: 'sub-root-app'});
  }
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值