【qiankun】子应用的路由信息传给主应用,主应用使用this.$router.push跳转子应用页面

文章描述了在使用qiankun微前端框架时,遇到的主应用(基于Vue2)与子应用(基于Vue3)之间的路由交互问题。子应用通过自定义事件传递路由信息,主应用监听并接收。在尝试用name属性进行路由跳转时遇到问题,因为警告提示name不存在。为了解决参数传递且不显示在URL,作者采用了window.history.pushState方法,并在子应用端获取存储的state来获取参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提:已经安装qiankun,并且子应用已经接入主应用

场景:主应用是vue2,子应用是vue3

子应用的路由文件router/index.ts

// 在这段后面加下列代码
const router = createRouter({
  history: createWebHistory(
    (window as any).__POWERED_BY_QIANKUN__
      ? "/mainapp/platform"
      : "/platform"
  ),
  routes,
});

// 子应用中触发自定义事件,并传递路由信息
window.dispatchEvent(new CustomEvent('routeChange', 
	{ 
		detail: router.options.routes 
	}
));

主应用的main.js文件中接收

new Vue({
	router,
	store,
	render: h => h(App),
	// 主要是这段代码
	mounted() {
		window.addEventListener('routeChange', (event) => {
			const routeInfo = event.detail;
			console.log(routeInfo.value, 'routeInfo')
		});
	}
}).$mount('#app')

主应用使用this.$router.push跳转子应用页面,在任何一个你需要跳转的vue页面里面使用就行

this.$router.push("子应用路径")
this.$router.push({path: "子应用路径", query: {传参}})

但是有个很抓狂的事情,name跳转死都不给跳,一直报警告说name不存在,但是我确定name一定存在,但是我要传参,并且这个参数不能显示在地址栏,所以只能放弃router.push

const state = { id: item.info.id };
const url = '/paasportal/api-service-platform/home/apiDetail';
window.history.pushState(state, '', url);
window.location.href = url;

子应用接收window.history.pushState的传值

const state = window.history.state;
const id = state ? state.id : null;
console.log(id, '==============')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值