记录下在 Vue3 中使用 Vite 自动生成路由
安装依赖
1
| npm install vue-router@4 --save
|
目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| src - router - index.js - views - about - index.vue - page.js - contact - index.vue - page.js - error - index.vue - page.js - index.vue - page.js - App.vue - main.js
|
router/index.js: 路由配置
views/about: 匹配 /about (path与目录名称一致)
views/contact: 匹配 /contact(path与目录名称一致)
views/error: path未匹配时的处理,比如404
**/page.js: 约定配置,导出比如 meta 等默认数据
**/index.vue: 约定组件
为了以后可能要新增的path,需要做一个约定
比如匹配 /login,需创建一个与 /login 同名的 src/views/login 目录,它也要有 index.vue 和 page.js 两个文件
代码
路由配置
router/index.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| import { createRouter, createWebHistory } from "vue-router"
const coms = import.meta.glob("../views/**/index.vue") const pages = import.meta.glob("../views/**/page.js", { eager: true, import: "default" })
const routes = Object.entries(pages).map(([path, meta]) => { const comPath = path.replace("page.js", "index.vue") path = path.replace("../views", "").replace("/page.js", "") || "/" const name = path.split("/").filter(Boolean).join("-") || "index" if (path === "/error") { path = "/:error*" } return { path, name, component: coms[comPath], meta } })
const router = createRouter({ history: createWebHistory(), routes })
router.beforeEach((to, from, next) => { document.title = to.meta.title next() })
export default router
|
main.js 配置
1 2 3 4 5 6 7 8
| import { createApp } from "vue"
import App from "./App.vue" import router from "./router/index"
const app = createApp(App) app.use(router) app.mount("#app")
|
App.vue 配置
1 2 3 4 5 6 7
| <template> <router-link to="/">首页 | </router-link> <router-link to="/about">关于 | </router-link> <router-link to="/contact">联系</router-link> <br /> <router-view></router-view> </template>
|
首页页面配置
views/index.vue
1 2 3
| <template> <p>首页</p> </template>
|
views/page.js
1 2 3
| export default { title: "首页" }
|
关于页面配置
views/about/index.vue
1 2 3
| <template> <p>关于</p> </template>
|
views/about/page.js
1 2 3
| export default { title: "关于" }
|
联系页面配置
views/contact/index.vue
1 2 3
| <template> <p>联系</p> </template>
|
views/contact/page.js
1 2 3
| export default { title: "联系" }
|
404页面配置
views/error/index.vue
1 2 3
| <template> <p>404</p> </template>
|
views/error/page.js
1 2 3
| export default { title: "404未找到" }
|
打包部署后直接访问子路由报错404
出现404可能原因:
- 直接访问
https://xxx/about、https://xxx/contatc
<router-link target="_blank">有 target="_blank" 属性,点击会跳转新页面
解决方法:
在服务器 Nginx 配置文件中添加:
1 2 3
| location / { try_files $uri $uri/ /index.html; }
|
然后重启 Nginx 服务
资料