微前端qiankun进阶使用:应用间通信

打印 上一主题 下一主题

主题 1026|帖子 1026|积分 3078

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
master主应用相干目次

  1. ├── src
  2. │ ├── micro                        # 存放微前端所需文件
  3. │   │── actions.js              # 官方通信方案:全局状态数据
  4. │   │── app.js                  # 子应用配置
  5. │   │── childEmit.js            # 子应用触发主应用的函数
  6. │   │── index.js                # 启动文件
  7. │   │── jsLibrary.js            # 公共方法库,用于下发子应用
  8. │   └── uiLibrary.js            # 公共组件库,用于下发子应用
  9. │ ├── store                        
  10. │   │── modules            
  11. │       │── pagers.js            # 应用间通信的数据仓库
  12. │   │── getters.js            
  13. │   │── index.js                # store主文件
复制代码
store中用pagers.js 文件里存放应用间通信的数据堆栈
主应用->子应用通信:通过props参数传递



  • 主应用通过props参数下发数据
  • 子应用在bootstrap和mount生命周期中接收数据
主应用下发数据

micro/app.js中
  1. /**
  2. * auth:pantt
  3. * time:2022.06.15
  4. * des:配置需要下发的子应用及其相关信息
  5. */
  6. import store from '@/store'
  7. const arr = window.origin.split(':')
  8. const origin = arr[0] + ':' + arr[1]
  9. const ENV = process.env.NODE_ENV
  10. /**
  11. * 主应用公共资源下发子应用
  12. */
  13. // 导入主应用ui库
  14. import LibraryUi from './uiLibrary'
  15. // 导入主应用工具类库
  16. import LibraryJs from './jsLibrary'
  17. // 导入主应用需要下发的emit函数
  18. import * as childEmit from './childEmit'
  19. // 注意:必须用方法获取,直接取store为undefined
  20. export function getApps() {
  21.    
  22.   // 配置要下发的数据
  23.   const msg = {
  24.    
  25.     data: store.getters, // 从主应用仓库读出的数据
  26.     components: LibraryUi, // 从主应用读出的组件库
  27.     utils: LibraryJs, // 从主应用读出的工具类库
  28.     emitFnc: childEmit // 从主应用下发emit函数来收集子应用反馈
  29.     // pager, // 从主应用下发应用间通信呼机
  30.   }
  31.   return [
  32.     /**
  33.      * name: 微应用名称 - 具有唯一性
  34.      * entry: 微应用入口 - 通过该地址加载微应用,本地与服服务器配置有区别
  35.      * container: 微应用挂载节点 - 微应用加载完成后将挂载在该节点上
  36.      * activeRule: 微应用触发的路由规则 - 触发路由规则后将加载该微应用
  37.      * props: 主应用下发给子应用传递数据
  38.      */
  39.     {
  40.    
  41.       name: 'netmoni_child1',
  42.       entry:
  43.         origin + (ENV === 'development' ? ':31325' : '/child/netmoni_child1/'),
  44.       container: '#child1_frame',
  45.       activeRule: '/sub/child1',
  46.       props: {
  47.     ...msg } // 下发子应用的信息
  48.     },
  49.   ]
  50. }
复制代码
store/getters.js
  1. const getters = {
  2.    
  3.   device: state => state.app.device,
  4.   token: state => state.user.token,
  5.   name: state => state.user.name,
  6.   childData: state => state.pagers.childData,
  7.   initialState: state => state.pagers.initialState // qiankun官方通信actions数据
  8. }
  9. export default getters
复制代码
micro/jsLibrary.js中
  1. /**
  2. * auth:pantt
  3. * time:2022.06.15
  4. * des:公共方法库,用于下发子应用
  5. */
  6. import request from '@/utils/request'// 统一下发公共的axios封装请求
  7. import * as validate from '@/utils/validate'
  8. const _exports = {
  9.     request, ...validate }
  10. export default _exports
复制代码
micro/uiLibrary.js中
  1. /**
  2. * auth:pantt
  3. * time:2022.06.15
  4. * des:公共组件库,用于下发子应用
  5. */
  6. import ZdEmpty from '@/components/Empty/index.vue'
  7. ZdEmpty.install = function (Vue) {
  8.   Vue.component('ZdEmpty', ZdEmpty)
  9. }
  10. const install = function (Vue) {
  11.   Vue.component('ZdEmpty', ZdEmpty)
  12. }
  13. if (typeof window !== 'undefined' && window.Vue) {
  14.   install(window.Vue)
  15. }
  16. export default {
  17.   install,
  18.   ZdEmpty
  19. }
复制代码
子应用接收数据

main.js中
  1. /**
  2. * bootstrap 只会在微
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表