qiankun微前端中主应用路由页面加载微应用的某个路由页面_qiankun 主应用跳转子应用其他路由

88 阅读4分钟

{ path: 'portal', component: PortalComponent, children: [{ path: '**', component: EmptyComponent }], }, ];


2. 微应用的 activeRule 需要包含主应用的这个路由 path

registerMicroApps([ { name: 'app1', entry: 'http://localhost:8080', container: '#container', activeRule: '/portal/app1', }, ]);


3. 在这个路由组件的 ngAfterViewInit 周期调用 start 函数,注意不要重复调用。



import { start } from 'qiankun'; export class PortalComponent implements AfterViewInit { ngAfterViewInit(): void { if (!window.qiankunStarted) { window.qiankunStarted = true; start(); } } }


#### qiankun在vue框架下`history 和hash`路由模式的使用


![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/c734301db32b42b1a03660f4828133d3~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=mYpB1EFAdITiVCW%2B9uqRlDd9hTU%3D)



##### 一、主应用是`hash`模式


**说明:**




> 

> 当`主应用是 hash 模式时`,一般`微应用也是 hash 模式`。主应用的一级 hash 路径会分配给对应的微应用(比如 `#/base1` ),此时微应用如果需要在 base 路径的基础上进行 hash 模式下的二级路径跳转(比如 `#/base1/child1` ),这个场景在当前 VueRouter 的实现方式下需要自己手动实现,给所有路由都添加一个前缀即可。VueRouter 的 hash 模式下的 base 参数不支持添加 hash 路径 base。

> 

> 

> 





> 

> 当主应用是 hash 模式时,微应用history模式时,我尝试了下,跳转出现各种bug问题,这里不展示了。

> 

> 

> 



**下面展示:** 主应用`hash模式` + 微应用`hash模式`


**主应用配置 :** `hash模式`


* router/index.js (路由配置)



// 一般hash模式下,不通过base:"/vue"这样添加前缀 const router = new VueRouter({ // mode: 'history', mode: 'hash', base: process.env.BASE_URL, routes })


* main.js 配置:




> 

> qiankun 主应用根据 `activeRule` 配置激活对应微应用  

>  激活路由需要添加`#/`前缀  

>  ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/11af12876f074bc5be3d199fafcdaa58~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=XDdAtuYF%2BQS6qZ4DTr7GLIHgnzU%3D)

> 

> 

> 



* 子级vue应用配置:`hash模式`




> 

> 需要在每个路由里面添加激活前缀`/vue`  

>  **注意:** 这里不能加 `#/vue`这个前缀,前缀跟主应用的激活路由匹配  

>  ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/fa7f7f47df644ce2bd928f6eb8ac838d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=Pox4X5HLPC0ii3aQyRhERF9ARVM%3D)  

>  **效果图**  

>  ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/ba4af01bfc014436aeb3b22ee2e1dd22~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=9zuPorQOeRt47SK9aWvDcQBURt0%3D)

> 

> 

> 




##### 二、主应用是history模式


**说明:**




> 

> 当主应用是 history 模式且微应用也是 hash模式时,表现完美。如果微应用需要添加 base 路径,设置子项目的 base 属性即可。

> 

> 

> 



**代码示例:** 主应用`history模式` + 微应用`hash模式`


**主应用配置:** `history模式`


* main.js 配置:




> 

> 不用添加前缀`#/`![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/374aca6268c84f3f9d03bde133cc70b6~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=4coU0f16NCbdyKIa2ScC9W3twro%3D)

> 

> 

> 



* router/index.js配置




> 

> ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/52bd46302a8849bbaa3517f924c2728c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=dQcn1TTh4J88pjRy3NMSBtmW5Vs%3D)

> 

> 

> 



* 微应用vue配置:`hash模式`




> 

> ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a085722fab08408786f14054cea929df~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=cw1qtQ%2FgHvemFzYmb4lJBgg%2BBvU%3D)

> 

> 

> 





> 

> **路由效果图:**  

>  ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/fa79c43743c547768ac635bf48c999e4~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=u9sZiUdXQiqVEABMmeNXRx6LUXg%3D)

> 

> 

> 



**说明:**




> 

> `当主应用是 history 模式,微应用是 history 模式`,表现完美。(条件允许推荐使用)

> 

> 

> 



**代码示例:** 应用是`history 模式` + 微应用 `history 模式`


**主应用配置:** `history模式`




> 

> ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/09e25d19af3c4b03bbed40facdbbd183~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=srW%2BhP%2Bxdb4FPNePdSD8lS3DSUI%3D)

> 

> 

> 



* router/index.js配置




> 

> ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0a2d9ef28cfe48c996fb98cc110685be~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=LR4Cn6VsdalvYTL6vChAFmPWHiM%3D)

> 

> 

> 



* 微应用vue配置:`history模式`




> 

> history 模式下可用`base:’/vue’` 添加激活前缀  

>  ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9a98a3bd3af84f23be400170d3a736e1~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=uiMAnRMk6rdsqE4VwEwOH3tRcLI%3D)

> 

> 

> 





> 

> 不使用base添加激活前缀,手动添加  

>  ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/56ad239fc1b948fda940a5e1fb1f685c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=%2FzBT%2F3KzFTe1lBU%2F5pXo3XvDGCo%3D)

> 

> 

最后
--


> 最后写上我自己一直喜欢的一句名言:`世界上只有一种真正的英雄主义就是在认清生活真相之后仍然热爱它`

> ![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/211c43995e4b4805a4d4a5ae9998f20f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1772623650&x-signature=prtOjHx30yr06p95W7DV9U4A09g%3D)



**开源分享:https://docs.qq.com/doc/DSmRnRGxvUkxTREhO**