前端知识框架 前端知识框架
首页
基础
框架
插件
Node
地图
更多
前端须知
  • 分类
  • 标签
  • 归档

BestIdea

首页
基础
框架
插件
Node
地图
更多
前端须知
  • 分类
  • 标签
  • 归档
  • JointJS入门
  • lottie动态图标以及超图中的使用
  • js实现前端pdf预览
  • js实现预览简版
  • 富文本实现图片粘贴
  • 移动端表单组件点击延迟问题解决办法
  • 在线预览解决方案
  • antv-x6 入门
  • antv-g2入门
  • antv-g2Plot
  • antv-s2 入门
  • antv-l7Plot
  • avtv-f2入门
  • Vue实现pdf、doc、txt、xlsx等的预览
  • micro-app使用
    • 子应用
      • 1. 配置跨域
      • 2. 判断应用是否在微前端环境中
      • 3. 数据通信
      • 4. 子系统内部跳转
    • 主应用
      • 1. 动态切换子系统
    • 前台缓存命名规则
      • localStorage(公共信息,不带子系统前缀)
      • sessionStorag(各个子系统信息,带子系统前缀)
    • 需要注意的问题
      • 1. rem问题
  • VueUse使用
  • webpack打包替换类名命名空间
  • 插件
宋晓倩
2023-11-15
目录

micro-app使用

开发文档:MicroApp (micro-zoe.github.io) (opens new window)

# 子应用

# 1. 配置跨域

开发环境需要配置支持跨域

devServer: {
  headers: {
    'Access-Control-Allow-Origin': '*',
  }
}
1
2
3
4
5

# 2. 判断应用是否在微前端环境中

使用 window.__MICRO_APP_ENVIRONMENT__ 判断

if (window.__MICRO_APP_ENVIRONMENT__) {
  console.log('我在微前端环境中')
}
1
2
3

# 3. 数据通信

# 1. 直接获取数据

const data = window.microApp.getData() // 返回基座下发的data数据

1
2

# 2. 监听函数获取数据

// 监听函数
function dataListener (data) {
  console.log('来自主应用的数据', data)
}

// 监听数据变化
window.microApp.addDataListener(dataListener)

// 监听数据变化,初始化时如果有数据则主动触发一次
window.microApp.addDataListener(dataListener, true)

// 解绑监听函数
window.microApp.removeDataListener(dataListener)

// 清空当前子应用的所有绑定函数(全局数据函数除外)
window.microApp.clearDataListener()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 3. 消息通信机制

// dispatch只接受对象作为参数
window.microApp.dispatch({type: '子应用发送给主应用的数据'})
1
2

dispatch只接受对象作为参数,它发送的数据都会被缓存下来。

micro-app会遍历新旧值中的每个key判断值是否有变化,如果所有数据都相同则不会发送(注意:只会遍历第一层key),如果数据有变化则将新旧值进行合并后发送。

// 第一次发送数据,记入缓存值 {name: 'jack'},然后发送 
window.microApp.dispatch({name: 'jack'})

// 第二次发送数据,将新旧值合并为 {name: 'jack', age: 20},记入缓存值,然后发送 
window.microApp.dispatch({age: 20})

// 第三次发送数据,新旧值合并为 {name: 'jack', age: 20},与缓存值相同,不再发送
window.microApp.dispatch({age: 20})
1
2
3
4
5
6
7
8

dispatch是异步执行的,多个dispatch会在下一帧合并为一次执行

window.microApp.dispatch({name: 'jack'})
window.microApp.dispatch({age: 20})
// 上面的数据会在下一帧合并为对象{name: 'jack', age: 20}一次性发送给主应用
1
2
3

dispatch第二个参数为回调函数,它会在数据发送结束后执行

window.microApp.dispatch({city: 'HK'}, () => {
  console.log('数据已经发送完成')
})
1
2
3

# 4. 发送重复消息

# 1. 手动清空

每次发送消息前先清空之前的通信数据

window.microApp.clearData()
window.microApp.dispatch({type: '子应用发送给主应用的数据'})
1
2

# 2. 强制发送 forceDispatch

// 强制发送数据,无论缓存中是否已经存在 name: 'jack' 的值

window.microApp.forceDispatch({name: 'jack'})
1
2
3

# 5. 消息格式

和Element-ui 消息提示Message状态类型保持一致

// 消息
window.microApp.dispatch({
  type: 'info',
  message: "子应用发送给主应用的数据"
})

// 成功
window.microApp.dispatch({
  type: 'success',
  message: "子应用发送给主应用的数据"
})

// 警告
window.microApp.dispatch({
  type: 'warning',
  message: "子应用发送给主应用的数据"
})

// 错误
window.microApp.dispatch({
  type: 'error',
  message: "子应用发送给主应用的数据"
})

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 6. 特殊情况消息传值

  1. 子系统token过期
window.microApp.dispatch({
  type: 'error',
  code: 401
})
1
2
3
4

# 4. 子系统内部跳转

使用消息通信传值给主应用,主应用做跳转 adhibitionAddress 对应的值和应用池中配置的地址字段保持一致

window.microApp.forceDispatch({
  adhibitionAddress: "/#/single-home"
}); 
1
2
3

# 主应用

# 1. 动态切换子系统

 <micro-app
    disable-scopecss
    :name="name"
    :url='url'
    :default-page='defaultPage'
  >
  </micro-app>
1
2
3
4
5
6
7
  1. name 必须唯一
  2. url是子系统基地址+产品标识:https://sdls.btzh.net/mdhj-pc
  3. default-page是指定跳转页面,是应用的地址
  4. 如果子系统是hash路由:default-page="/#/home"
  5. 如果子系统是history路由:default-page="/home"
<!-- 不带域名的地址 -->
<micro-app name='my-app' url='http://localhost:3000/' default-page='/page1'></micro-app>

<!-- 带域名的地址 -->
<micro-app name='my-app' url='http://localhost:3000/' default-page='http://localhost:3000/page1'></micro-app>

<!-- 带查询参数 -->
<micro-app name='my-app' url='http://localhost:3000/' default-page='/page1?id=9527'></micro-app>

<!-- 带hash -->
<micro-app name='my-app' url='http://localhost:3000/' default-page='/page1#hash'></micro-app>

1
2
3
4
5
6
7
8
9
10
11
12

# 前台缓存命名规则

# localStorage(公共信息,不带子系统前缀)

  • 用户信息:localStorage.USERS
  • token: localStorage.TOKEN
  • 地图配置: localStorage.GIS_CONFIG
  • 字典信息: localStorage.DICTIONARY_key(字典代码)

# sessionStorag(各个子系统信息,带子系统前缀)

# 需要注意的问题

# 1. rem问题

基座应用的html {font-size}会影响子系统

现在基座应用的设置是html {font-size: 100px;} 1rem = 100px

上次更新: 2024/01/18, 10:44:15
Vue实现pdf、doc、txt、xlsx等的预览
VueUse使用

← Vue实现pdf、doc、txt、xlsx等的预览 VueUse使用→

最近更新
01
webpack打包替换类名命名空间
05-01
02
Vite常用配置
02-26
03
crypto前端加密
01-18
更多文章>
Theme by Vdoing | Copyright © 2022-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式