• 微前端 - micro-app 数据通信


    前言

    上文记录了如何在项目中接入 micro-app,本文主要记录下微前端基座应用和子应用之间的数据通信

    一、 基座应用向子应用发送数据

    方式1:通过 data 属性发送数据

    1. <script>
    2. export default {
    3. name: 'vue3',
    4. data () {
    5. return {
    6. url: 'http://localhost:4009/',
    7. microAppData: {msg: '来自基座的数据'}
    8. }
    9. },
    10. }
    11. script>

    方式2:手动发送数据

    手动发送数据需要通过 name 指定接受数据的子应用,此值和 元素中的 name 一致。

    1. import microApp from '@micro-zoe/micro-app'
    2. // 发送数据给子应用 appname-vue3,setData第二个参数只接受对象类型
    3. microApp.setData('appname-vue3', {msg: '新的数据'})

    二、子应用获取来自基座应用的数据

    micro-app 会向子应用注入名称为 microApp 的全局对象,子应用通过这个对象和基座应用进行数据交互。

    方式1:直接获取数据

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

    方式2:绑定监听函数

    1. function dataListener (data) {
    2. console.log('来自基座应用的数据', data)
    3. }
    4. /**
    5. * 绑定监听函数,监听函数只有在数据变化时才会触发
    6. * dataListener: 绑定函数
    7. * autoTrigger: 在初次绑定监听函数时如果有缓存数据,是否需要主动触发一次,默认为false
    8. * !!!重要说明: 因为子应用是异步渲染的,而基座发送数据是同步的,
    9. * 如果在子应用渲染结束前基座应用发送数据,则在绑定监听函数前数据已经发送,在初始化后不会触发绑定函数,
    10. * 但这个数据会放入缓存中,此时可以设置autoTrigger为true主动触发一次监听函数来获取数据。
    11. */
    12. window.microApp.addDataListener(dataListener: Function, autoTrigger?: boolean)
    13. // 解绑监听函数
    14. window.microApp.removeDataListener(dataListener: Function)
    15. // 清空当前子应用的所有绑定函数(全局数据函数除外)
    16. window.microApp.clearDataListener()

    三、子应用向基座应用发送数据

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

    四、基座应用获取来自子应用的数据

    方式1:直接获取数据

    1. import microApp from '@micro-zoe/micro-app'
    2. const childData = microApp.getData(appName) // 返回子应用的data数据

    方式2:监听自定义事件 datachange

    1. <script>
    2. export default {
    3. name: 'vue3',
    4. data () {
    5. return {
    6. url: 'http://localhost:4009/',
    7. microAppData: {msg: '来自基座的数据'}
    8. }
    9. },
    10. methods: {
    11. handleDataChange (e) {
    12. console.log('来自子应用的数据:', e.detail.data)
    13. }
    14. }
    15. }
    16. script>

    方式3: 绑定监听函数

    1. import microApp from '@micro-zoe/micro-app'
    2. function dataListener (data) {
    3. console.log('来自子应用的数据', data)
    4. }
    5. /**
    6. * 绑定监听函数
    7. * appName: 应用名称
    8. * dataListener: 绑定函数
    9. * autoTrigger: 在初次绑定监听函数时如果有缓存数据,是否需要主动触发一次,默认为false
    10. */
    11. microApp.addDataListener(appName: string, dataListener: Function, autoTrigger?: boolean)
    12. // 解绑监听my-app子应用的函数
    13. microApp.removeDataListener(appName: string, dataListener: Function)
    14. // 清空所有监听appName子应用的函数
    15. microApp.clearDataListener(appName: string)

    五、全局数据通信

    全局数据通信会向基座应用和所有子应用发送数据,在跨应用通信的场景中适用。

    1、发送全局数据

    基座应用:

    1. import microApp from '@micro-zoe/micro-app'
    2. // setGlobalData只接受对象作为参数
    3. microApp.setGlobalData({type: '全局数据'})

    子应用:

    1. // setGlobalData只接受对象作为参数
    2. window.microApp.setGlobalData({type: '全局数据'})

    2、获取全局数据

    基座应用:

    1. import microApp from '@micro-zoe/micro-app'
    2. // 直接获取数据
    3. const globalData = microApp.getGlobalData() // 返回全局数据
    4. function dataListener (data) {
    5. console.log('全局数据', data)
    6. }
    7. /**
    8. * 绑定监听函数
    9. * dataListener: 绑定函数
    10. * autoTrigger: 在初次绑定监听函数时如果有缓存数据,是否需要主动触发一次,默认为false
    11. */
    12. microApp.addGlobalDataListener(dataListener: Function, autoTrigger?: boolean)
    13. // 解绑监听函数
    14. microApp.removeGlobalDataListener(dataListener: Function)
    15. // 清空基座应用绑定的所有全局数据监听函数
    16. microApp.clearGlobalDataListener()

    子应用:

    1. // 直接获取数据
    2. const globalData = window.microApp.getGlobalData() // 返回全局数据
    3. function dataListener (data) {
    4. console.log('全局数据', data)
    5. }
    6. /**
    7. * 绑定监听函数
    8. * dataListener: 绑定函数
    9. * autoTrigger: 在初次绑定监听函数时如果有缓存数据,是否需要主动触发一次,默认为false
    10. */
    11. window.microApp.addGlobalDataListener(dataListener: Function, autoTrigger?: boolean)
    12. // 解绑监听函数
    13. window.microApp.removeGlobalDataListener(dataListener: Function)
    14. // 清空当前子应用绑定的所有全局数据监听函数
    15. window.microApp.clearGlobalDataListener()

    micro-app 官网链接:MicroApp 

    官方 demo 地址:GitHub - micro-zoe/micro-app-demo: micro-app 案例

  • 相关阅读:
    UnrealSynth - 基于虚幻引擎的YOLO合成数据生成器
    Linux systemd 定时任务
    5. Python 数据类型之整数
    拦截器碰到的坑记录
    freeRTOS内部机制——创建任务的内部细节
    知识蒸馏实战:使用CoatNet蒸馏ResNet
    数据结构:复杂度分析
    三极管共射放大电路静态工作点怎么设计
    13.1 使用DirectX9绘图引擎
    python学习之基础语法条件语句
  • 原文地址:https://blog.csdn.net/lhz_333/article/details/126349103