微前端子应用路由跳转后主应用菜单高亮不更新怎么办?
我在用 qiankun 搭建微前端项目,主应用是 Vue3,子应用也是 Vue。现在的问题是:当在子应用里通过 router.push('/user/list') 跳转路由后,浏览器地址栏变了,但主应用顶部菜单的高亮状态没跟着变,还是停留在之前的菜单项。
我试过在主应用监听 popstate 事件,但子应用内部的 push 并不会触发这个事件。也尝试过通过 props 把主应用的 router 传给子应用,但感觉耦合太强了。有没有更优雅的方式让主应用感知到子应用的路由变化?
目前主应用注册子应用的方式大概是这样:
registerMicroApps([
{
name: 'app-user',
entry: '//localhost:8081',
container: '#subapp-viewport',
activeRule: '/user'
}
]);
你可以在子应用中使用
qiankun的initGlobalState和MicroAppStateActions来实现主应用和子应用之间的通信。具体步骤如下:1. 在主应用中初始化全局状态,并定义一个方法来更新菜单高亮状态。
2. 在子应用中引入全局状态,并在路由变化时调用主应用提供的方法来更新状态。
先在主应用中做这些改动:
然后在子应用中:
这样,子应用的路由变化就会通知到主应用,主应用就能根据新的路由更新菜单的高亮状态了。
别忘了确保主应用和子应用之间的时间点对得上,有时候初始化顺序不对可能会导致通信失败。希望这能帮到你,搞定这个问题之后记得给自己加个鸡腿哦。