vue3 vue-router4 报错 No match found for location with path
如图,我猜测是路由跳转的时候,还没有注入响应的路由,然后第二次访问时已经生成好路由了。
虽然可以正常访问页面,但这个报错看着很不舒服,下面是我的代码,希望大神看看哪里写的有问题
//路由完全注册标识let routeFlag = false
router.beforeEach((to, from, next) => {
const hasToken = localStorage.getItem('token')
if (hasToken) {
if (routeFlag) {
next()
} else {
// 注册动态路由
store
.dispatch('userModule/ASYNC_ROUTER')
.then(() => {
genRouteConfig().then(() => {
routeFlag = true
next({ ...to, replace: true })
})
})
.catch(() => {
localStorage.removeItem('token')
next(`/login?redirect=${to.path}`)
})
}
}
//动态生成路由const genRouteConfig = () => {
const getMenus: newMenustype = store.getters['userModule/getMenus']
return new Promise((resolve, reject) => {
router.addRoute({
path: '/:catchAll(.*)',
redirect: '/404',
name: 'NotFound'
})
for (let key in getMenus) {
let menusObj = getMenus[key]
const routerObj: RouteRecordRaw = {
path: '/' + menusObj.name,
name: menusObj.name,
component: () => import('@/views/homepage/homepage.vue'),
children: []
}
if (menusObj.children) {
routerObj.redirect = `/${menusObj.name}/${menusObj.children[0].name}`
for (let i = 0; i < menusObj.children.length; i++) {
let menuName: string = menusObj.children[i].name
if (routerObj.children) {
routerObj.children.push({
path: menuName,
name: menuName,
component: modules[`./views/${menusObj.name}/${menuName}.vue`]
})
}
}
}
router.addRoute(routerObj)
}
resolve(true)
})
}
回答:
如果当前路由是动态追加的,beforeEach
第一次执行的时候,这个路由还没追加进去,那么路由的 matched
为空,就会报这个警告。
解决办法,在 router/index.ts
文件里,也就是初始化路由的文件里,注册好 404 路由,这样第一次执行 beforeEach
的时候匹配不到路由,就会匹配已经有的 404 路由,matched
里就不是空的了,就没有警告了。
router/index.ts:
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'const routes: Array<RouteRecordRaw> = [
{
path: '/:catchAll(.*)',
name: '404',
component: () => import('@/views/error/index.vue')
}
]
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})
export default router
回答:
遇到同样的问题求解答,会有警告但是之前的页面也会被销毁,不在缓存
以上是 vue3 vue-router4 报错 No match found for location with path 的全部内容, 来源链接: utcz.com/p/937534.html