vite-plugin-pages 中可以使用带有静态部分的动态路由吗?
Dynamic route with static part possible in vite-plugin-pages?
我正在构建一个 Vue.js 3 应用程序,其中包含用于路由的 Vite 和 vite-plugin-pages。 https://github.com/hannoeru/vite-plugin-pages
是否可以有一个带有静态部分的动态路由?
e.g. /@[handle].vue
当我这样做时,它不起作用,而是退回到我的包罗万象的路线 [...all].vue
我不想将它放在子文件夹中,所以 /@/[handle].vue
不是一个选项。我想要 @
符号后跟作为动态用户名之后的任何内容。
我在另一个使用 Vue 路由器的应用程序中设法做到了这一点,但不确定如何通过这个插件在基于文件夹的路由中实现同样的事情。
我之前是怎么做到的:
const router = new Router({
routes: [
{
path: '/',
name: 'Home',
component: Home,
children: [
{
path: '/@:handle',
name: 'Profile',
component: () => import('../views/Profile.vue'),
props: true,
},
],
},
]
})
您可以使用插件的 onRoutesGenerated
hook 在将路由传递给 Vue Router 之前对其进行转换。
该解决方案需要使用 @
前缀命名动态路由参数,因此您的文件名将是 [@handle].vue
:
pages/user/[@handle].vue
以下 Vite 配置重命名以 @
开头的路由参数,以便 @
移动到参数之前的路径中:
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Pages from 'vite-plugin-pages'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
Pages({
onRoutesGenerated(routes) {
const transformRoute = route => ({
...route,
path: route.path.replace('/:@', '/@:'),
children: route.children?.map(transformRoute) ?? [],
})
return routes.map(transformRoute)
},
}),
],
})
所以上面例子的路由path
就是这样改造的:
/user/:@handle.vue
...为此:
/user/@:handle.vue
我正在构建一个 Vue.js 3 应用程序,其中包含用于路由的 Vite 和 vite-plugin-pages。 https://github.com/hannoeru/vite-plugin-pages
是否可以有一个带有静态部分的动态路由?
e.g. /@[handle].vue
当我这样做时,它不起作用,而是退回到我的包罗万象的路线 [...all].vue
我不想将它放在子文件夹中,所以 /@/[handle].vue
不是一个选项。我想要 @
符号后跟作为动态用户名之后的任何内容。
我在另一个使用 Vue 路由器的应用程序中设法做到了这一点,但不确定如何通过这个插件在基于文件夹的路由中实现同样的事情。
我之前是怎么做到的:
const router = new Router({
routes: [
{
path: '/',
name: 'Home',
component: Home,
children: [
{
path: '/@:handle',
name: 'Profile',
component: () => import('../views/Profile.vue'),
props: true,
},
],
},
]
})
您可以使用插件的 onRoutesGenerated
hook 在将路由传递给 Vue Router 之前对其进行转换。
该解决方案需要使用 @
前缀命名动态路由参数,因此您的文件名将是 [@handle].vue
:
pages/user/[@handle].vue
以下 Vite 配置重命名以 @
开头的路由参数,以便 @
移动到参数之前的路径中:
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Pages from 'vite-plugin-pages'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
Pages({
onRoutesGenerated(routes) {
const transformRoute = route => ({
...route,
path: route.path.replace('/:@', '/@:'),
children: route.children?.map(transformRoute) ?? [],
})
return routes.map(transformRoute)
},
}),
],
})
所以上面例子的路由path
就是这样改造的:
/user/:@handle.vue
...为此:
/user/@:handle.vue