wiskewu
wiskewu
## 背景 > 父应用通过setData发送数据到子应用,子应用使用addDataListener在接收相同数据时不触发回调。本质原因[官网](https://micro-zoe.github.io/micro-app/docs.html#/zh-cn/data)也有提及,在setData时会对对象第一层结构字段作检测,如果数据相同则不会发送:  ## 同类问题参考 在项目的issues中,有很多相关的issue提到数据通信问题,如 #1356 #1389 #1409 等。 ## 父应用向子应用发送消息,或子应用向父应用发送消息,消息总是可达的 基本原理:在micro-app提供的`setGlobalData(data)`方法中,不涉及iframe间通讯,不涉及数据JSON拷贝解析等,故我们可以往data中传递函数。 实现步骤: 1. 封装一个简单的`Emitter`发布订阅工具; 2. 在父应用中初始化一个全局数据`gData`,该数据包含一个`emitter`实例; 3. 在父应用调用`microApp.start()`前,调用`microApp.setGlobalData(gData)`初始化全局数据; 4. 在子应用中通过`window.microApp.getGlobalData()`获取`emitter`实例; 5. 父应用调用`emitter`的发布/订阅方法; 6. 子应用调用`emitter`的发布/订阅方法。 注意,这个emitter在实现时不同于常见的发布订阅,需对订阅的事件类型(`name`)作特殊处理,以区分多个不同应用(主应用/子应用)。 ##...