Vue3学习与实战:配置使用vue-router路由
创作时间:
作者:
@小白创作中心
Vue3学习与实战:配置使用vue-router路由
引用
CSDN
1.
https://m.blog.csdn.net/qq_24428851/article/details/142793983
随着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文件中使用
// 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>
热门推荐
让染发更安全!科学家找到纯天然方案,可提供从金色到黑色一系列着色效果
西安市五所顶尖高中全解析
【高数】微分方程,公式+推导+例题
土豆发芽的原因和处理方法(发芽土豆对人体健康的影响及如何避免土豆发芽)
早餐,牛奶别直接喝,和它是绝配,放一起味道更好,营养又美味
车膜怎么选?汽车贴膜选购全攻略
人不会无缘无故得癌!肿瘤科主任:背后有这4个原因
进度追踪功能拆解——如何精准追踪项目进度?
《吕洞宾过岳阳楼图》探秘:夏永笔下的道教传奇与湖光山色
食欲不振、打嗝、恶心,可能胃溃疡在作怪,做好6个预防
13所高校校长齐聚"冰城"研讨一流大学建设
《哪吒2》海外票房破154.7亿,口碑两极分化,国产电影出海路在何方?
激荡四十年:中国明星从国内影坛到国际舞台
紫外线老化试验箱清洁保养指南
《蛤蟆先生去看心理医生》最治愈的4句话,读懂你就通透了
汽车打蜡全方位指南:如何提升光泽并保护车漆?
工业旅游频“出圈”:探索“工业+文化”融合的旅游新路径
北欧神话:诸神,诸神黄昏,创造与更多
最通俗易懂的吉他保养方法,学起来
中国书法五种主要字体的特点简述
国家公务员好找工作吗?知乎热议下的真相
打印机纸走一半就不动?一文详解打印机不走纸问题及解决方案
固态硬盘固件深度解析:升级带来的性能提升与注意事项
爱好升级:解锁在家自制咖啡的美味秘籍
厂房通风降温如何选择合适的空调类型?
拉斯维加斯旅游季节全攻略:何时去最划算?
U盘如何防泄密?六大高效防护措施全解析
大学生支教实习总结:不同地区的支教经历与感悟
丝瓜最晚几月份种?种植时间全解析
颐和园旅游攻略:历史景点全解析及游览指南