一、场景
pc端项目,通过微前端嵌入页面
<micro-app name='xx' url='xx'></micro-app>
二、问题
点击侧边栏打开新页面,顶部tab选项卡切换a、b页面缓存页面不刷新,保持用户操作,关闭选项卡后从侧边栏菜单打开新页面需要重置页面。
因为子应用(嵌入的页面)中内嵌了一个iframe,每次都会重新加载,所以在tab选项卡切换页面时无法保持不刷新
三、解决
在主应用中用v-show来控制子应用
<micro v-show="$route.fullPath === '子应用'"></micro>
<router-view :key="$route.fullPath" v-if="$route.fullPath !== '子应用'"></router-view>
这样暂时是能实现tab选项卡切换时,不刷新页面,但是选项卡关闭之后再打开,此时相当于这个子应用的隐藏切换到显示,页面没有重新加载,不满足交互要求
因此增加了侧边栏打开页面重载子应用
microApp.forceSetData('my-app', { action: "reload" })
forceSetData方法拥有和setData一样的参数和行为,唯一不同的是forceSetData会强制发送数据,无论数据是否变化
通过强制发送重载子应用,子应用是会重新加载了,但是重载后的页面一直在刷新,一直请求接口
排查问题应该是主应用给子应用传递数据的方法setData导致
改为直接return出数据
很不幸的是,此时页面直接加载不出来了,暂时不知道为什么采用return的方法不行
最终解决办法,在主应用请求接口前先做一下清空数据
microApp.clearData('my-app')
使用配置项的方法也不行,还是一直在重新加载,只能手动清空