Vue3学习与实战 · 配置使用vue-router路由
随着Vue版本的升级,Vue 2.x
项目和Vue 3.x
项目在使用vue-router上有些区别,本文就简单介绍下vue-router
在Vue3
中的配置和使用。
一、目录结构
demo/ package.json vite.config.js index.html public/ src/ api/ assets/ common/ components/ store/ views/ home.vue list.vue router/ index.js App.vue main.js
二、版本依赖
vite
: ^2.0.0
vue
: ^3.2.8
vue-router
: ^4.0.1
三、配置路由
- 3-1.配置
src/router/index.js
路由文件
// src/router/index.js import {createRouter, createWebHistory, createWebHashHistory} from 'vue-router' import { defineAsyncComponent } from 'vue' const router = createRouter({ // history: createWebHashHistory(), // hash 模式 history: createWebHistory(), // history 模式 routes: [ { path: '/', name: 'home', component: defineAsyncComponent(() => import(`../views/home.vue`)), meta: { title: '首页', }, }, { path: '/list', name: 'list', component: defineAsyncComponent(() => import(`../views/list.vue`)), meta: { title: '列表页', }, }, { path: '/*', redirect: '/', }, ] }) // 全局路由守卫 router.beforeEach((to, from, next)=>{ // console.log(to, from) if (to.meta.title) { document.title = `${to.meta.title}`; } next() }) router.afterEach((to, from)=>{ // console.log(to, from) console.log('afterEach') }) export default router
说明:
-
路由模式:
history
模式对应createWebHistory()
方法hash
模式对应createWebHashHistory()
方法
-
路由懒加载:在
vite+Vue3
项目中使用import()
会有报错,所以使用vue提供的一个方法defineAsyncComponent
,详见另一篇:vue3 + vite实现异步组件和路由懒加载 -
3-2.在
src/main.js
入口文件中注册使用路由
// src/main.js import { createApp } from 'vue' import router from './router' import store from './store' import App from './App.vue' // ... const app = createApp(App) app.use(router).use(store); app.mount('#app')
- 3-3.在
src/App.vue
文件中使用<router-view/>
// src/App.vue <template> <router-view/> </template>
四、使用路由
- 4-1.在
Option API
中使用和Vue 2.x
中使用没有差别。如下:
<template> <div></div> </template> <script> export default { data() { return {} }, mounted() { // 路由跳转 && 设置参数 this.$router.push({ path: '/list', query: { id: 123, }, }) // 获取参数 let { id } = this.$route.query }, } </script>
- 4-2.在
Composition API
中不能再直接访问this.$router
或this.$route
,所以要使用useRouter
和useRoute
函数。
<template> <div></div> </template> <script> import { ref } from 'vue' import { useRouter, useRoute, onBeforeRouteLeave, onBeforeRouteUpdate } from 'vue-router' import ajax from "./ajax"; export default { setup () { const router = useRouter() const route = useRoute() // 路由跳转 && 设置参数 router.push({ path: '/list', query: { id: 123, }, }) // 获取参数 let { id } = route.query // 局部路由守卫 onBeforeRouteLeave((to, from) => { const answer = window.confirm( '是否要离开本页面?' ) // 取消导航并停留在同一页面上 if (!answer) return false }) const userData = ref() onBeforeRouteUpdate(async (to, from) => { //仅当 id 更改时才获取用户,例如仅 query 或 hash 值已更改 if (to.params.id !== from.params.id) { userData.value = await ajax(to.params.id) } }) }, } </script>
《Vue3学习与实战》系列
- Vue3学习与实战 · 组件通信
- Vue3学习与实战 · 全局挂载使用Axios
- Vue3学习与实战 · 配置使用vue-router路由(本文)
- Vue3学习与实战 · Vuex状态管理
- vue3 + vite实现异步组件和路由懒加载
- Vite+Vue3+Vant快速构建项目
欢迎访问:天问博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了