use*_*782 13 vue-router vuejs3
我正在将 Vue Router 与 Vue 3 一起使用,并尝试添加一个包罗万象的路由以在用户尝试访问无效 URL 时重定向用户。当我尝试使用通配符 (*) 时,我将以下错误记录到控制台:
Uncaught Error: A non-empty path must start with "/"
at tokenizePath (vue-router.esm.js?8c4f:975)
at createRouteRecordMatcher (vue-router.esm.js?8c4f:1106)
at addRoute (vue-router.esm.js?8c4f:1190)
at eval (vue-router.esm.js?8c4f:1335)
at Array.forEach (<anonymous>)
at createRouterMatcher (vue-router.esm.js?8c4f:1335)
at createRouter (vue-router.esm.js?8c4f:2064)
at eval (index.js?a18c:26)
at Module../src/router/index.js (app.js:1402)
at __webpack_require__ (app.js:854)
Run Code Online (Sandbox Code Playgroud)
我假设这是因为我没有在包含星号的路径前面加上“/”,但是如果我这样做,那么捕获全部不起作用。以下是我的路线:
imports...
const routes = [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/user',
name: 'User',
// route level code-splitting
// this generates a separate chunk (user.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import(/* webpackChunkName: "user" */ '../views/user/User.vue'),
children: [{path: '', component: UserStart}, {path: ':id', component: UserDetail}, {path: ':id/edit', component: UserEdit, name: 'userEdit'}]
},
{path: '/redirect-me', redirect: '/user'},
{path: '*', redirect: '/'}
]
const router = createRouter({
history: createWebHashHistory(),
routes
})
export default router
Run Code Online (Sandbox Code Playgroud)
通配符路由是路由数组中的最后一个对象。有谁知道我做错了什么?
Raj*_*Raj 37
现在必须使用带有自定义正则表达式的参数定义捕获所有路由 (/*) :/:catchAll(.*)
例如:
{
// path: "*",
path: "/:catchAll(.*)",
name: "NotFound",
component: PageNotFound,
meta: {
requiresAuth: false
}
}
Run Code Online (Sandbox Code Playgroud)
就我个人而言,对于 Vue 3 中 Vue 2 的 *(星标或全部捕获)路由,我使用:
{
path: '/:pathMatch(.*)*', <== THIS
name: 'not-found',
component: NotFound
}
Run Code Online (Sandbox Code Playgroud)
现在必须使用带有自定义正则表达式的参数定义捕获所有路由 (*, /*):
参数名称可以是您想要的任何名称catchAll, pathMatch, noPage等
{
path: '/:pathMatch(.*)*', //will match everything and put it under `$route.params.pathMatch`
name: 'not-found',
component: NotFound
}
Run Code Online (Sandbox Code Playgroud)
{
path: '/user-:afterUser(.*)',// will match anything starting with `/user-` and put it under `$route.params.afterUser`
component: UserGeneric
}
Run Code Online (Sandbox Code Playgroud)
/:pathMatch(.*)*
*如果您计划使用其名称直接导航到未找到的路线,则最后一个是必要的。
如果省略/params 中的字符,则在解析或推送时将对其进行编码。
例如,如果您使用path: /:pathMatch(.*)(注意:没有最后一个星号)并转到/user/not-found(不存在的页面),this.$route.params.pathMatch则将是一个字符串 =>'user/not-found'
// bad example if using named routes:
router.resolve({
name: 'bad-not-found',
params: { pathMatch: 'not/found' },
}).href // '/not%2Ffound'
Run Code Online (Sandbox Code Playgroud)
相反,如果您使用path: /:pathMatch(.*)*(注意:带星号)this.$route.params.pathMatch将是一个数组['user', 'not-found']
// good example:
router.resolve({
name: 'not-found',
params: { pathMatch: ['not', 'found'] },
}).href // '/not/found'
Run Code Online (Sandbox Code Playgroud)
请阅读文档:从从 vue 2 迁移到 vue 3和Catch all / 404 Not found Route
| 归档时间: |
|
| 查看次数: |
8836 次 |
| 最近记录: |