qiankun中主应用和子应用都是vue2框架,路由模式都为hash,且publicPath都不一样,在注册启动后报错,并且什么样的路由会命中微应用规则
时间: 2024-06-05 19:10:42 浏览: 63
关于 qiankun 中主应用和子应用报错的问题,可能是由于路由模式不同导致的,建议将主应用和子应用的路由模式都改为 `history`,并且确保所有应用的 `publicPath` 都正确配置。
路由命中微应用规则的条件如下:
1. 路径要以微应用的 `activePath` 开头;
2. 如果微应用的 `exact` 属性为 `true`,则路径需要与 `activePath` 完全匹配;
3. 如果微应用的 `exact` 属性为 `false`,则路径只需要匹配到 `activePath` 即可。
举个例子,如果一个微应用的 `activePath` 为 `/app1`,那么以下路径都会命中该微应用:
- `/app1`
- `/app1/page1`
- `/app1/page2`
- `/app1/subapp1`
但以下路径不会命中该微应用:
- `/app1page1`
- `/app1page2`
- `/app2/page1`
相关问题
vue的qiankun子应用为什么hash路由跳转不成功
在使用 Qiankun 开发子应用时,如果子应用使用的是 hash 模式路由,需要在子应用的入口文件中,手动初始化路由。
在 Vue 的子应用中,可以在 `main.js` 文件中进行路由初始化,具体实现如下:
```
import Vue from 'vue'
import App from './App.vue'
import router from './router'
Vue.config.productionTip = false
// 手动初始化路由
let instance = null
function render(props = {}) {
const { container } = props
instance = new Vue({
router,
render: h => h(App)
}).$mount(container ? container.querySelector('#app') : '#app')
}
// 如果不是作为子应用使用,则直接渲染应用
if (!window.__POWERED_BY_QIANKUN__) {
render()
}
// 导出生命周期钩子函数
export async function bootstrap() {}
export async function mount(props) {
// 初始化路由
render(props)
}
export async function unmount() {
// 销毁实例
instance.$destroy()
instance = null
}
```
在这里,我们通过 `render` 函数手动初始化了路由,并在 `mount` 钩子中再次调用 `render` 函数,以保证子应用在挂载时能够正确初始化路由。
另外,需要注意的是,在切换子应用时,主应用会将当前的路由信息传递给子应用,因此,子应用需要在接收到这些信息后自行进行路由跳转。你可以通过监听 `qiankun` 的 `routeChange` 事件来实现这个功能,具体实现如下:
```
import Vue from 'vue'
import App from './App.vue'
import router from './router'
Vue.config.productionTip = false
// 手动初始化路由
let instance = null
function render(props = {}) {
const { container } = props
instance = new Vue({
router,
render: h => h(App)
}).$mount(container ? container.querySelector('#app') : '#app')
}
// 如果不是作为子应用使用,则直接渲染应用
if (!window.__POWERED_BY_QIANKUN__) {
render()
}
// 导出生命周期钩子函数
export async function bootstrap() {}
export async function mount(props) {
// 初始化路由
render(props)
// 监听 routeChange 事件
props.onGlobalStateChange((state, prev) => {
if (state.type === 'vue2_subapp_route_change') {
const { path } = state.payload
router.push(path)
}
})
}
export async function unmount() {
// 销毁实例
instance.$destroy()
instance = null
}
```
在这里,我们通过 `props.onGlobalStateChange` 监听 `routeChange` 事件,并在事件回调函数中跳转路由。当主应用切换路由时,会触发这个事件,从而实现路由跳转。
qiankun子应用使用hash路由在自己工程里面跳转
如果您的 qiankun 子应用使用 hash 路由模式,并且您想要在子应用自己的工程中进行页面跳转,可以通过以下方式实现:
1. 在子应用中引入 `history` 库,用于操作浏览器的历史记录和 URL。
```javascript
import { createHashHistory } from 'history';
const history = createHashHistory();
```
2. 使用 `history.push` 方法进行页面跳转,例如:
```javascript
history.push('/path/to/page');
```
这样就可以在子应用中进行 hash 路由的页面跳转了。需要注意的是,如果您的 qiankun 主应用也使用了 hash 路由模式,那么在子应用中进行页面跳转时,需要使用 `window.parent.location.hash` 来操作主应用的 URL,例如:
```javascript
window.parent.location.hash = '/path/to/page';
```
这样就可以通过 hash 路由在 qiankun 子应用中进行页面跳转了。
阅读全文