一 路由
1. 路由是什么呢?
路由是一种映射关系
2. Vue中的路由是什么?
路径和组件的映射关系
![](https://img-blog.csdnimg.cn/img_convert/2df284628060646e6b5282800ce9b9e6.png)
二 为何使用路由
1. 什么是单页面应用?
所有的业务都在一个页面编写, 只有一个html
2. 单页面应用好处?
开发效率高, 用户体验好
3. 单页面如何切换场景?
依赖路由切换显示
![](https://img-blog.csdnimg.cn/img_convert/fd2da89a922b13d7682189a31cd7ad45.png)
三 使用路由
![](https://img-blog.csdnimg.cn/img_convert/1d39032444a124d4a7f2b43498c27b1d.png)
3.1 组件可以分为哪两类
.vue文件分2类, 一个是页面组件, 一个是复用组件
![](https://img-blog.csdnimg.cn/img_convert/be56e61809475e080ae32b0e89ac0651.png)
1. 为何把.vue文件分类?
方便理解和使用
2. 页面组件用在哪里?
配合路由, 切换页面
3. 复用组件用在哪里?
页面组件, 重复渲染结构一样的标签
3.2 基本使用
![](https://img-blog.csdnimg.cn/img_convert/7e5c213ae12683a1875230d559f54564.png)
![](https://img-blog.csdnimg.cn/img_convert/22f8562b5eb7426183180a3c6dee45c4.png)
1. vue-router本质是什么?
第三方包, 下载后集成到vue项目中
2. vue-router如何使用?
下包/引入/注册/规则/路由对象/注入/挂载点
3. 规则如何生效?
切换url上hash值, 开始匹配规则, 对应组件展示到router-view位置
四 声明式导航
4.1 声明式导航
![](https://img-blog.csdnimg.cn/img_convert/437f3a15917a64b2d3471aa33fc431ae.png)
1. router-link是什么?
VueRouter在全局注册的组件, 本质就是a标签
2. router-link怎么用?
当标签使用, 必须传入to属性, 指定路由路径值
3. router-link好处?
自带激活时的类名, 可以做高亮
案例:
![](https://img-blog.csdnimg.cn/img_convert/32892a0610047ffb5feff8e4866077dc.png)
![](https://img-blog.csdnimg.cn/img_convert/c67bea9f110ae1af4502c5e74974a297.png)
4.2 跳转传值
![](https://img-blog.csdnimg.cn/img_convert/169b9e6752fac8c15711112a6c524352.png)
1. 声明式导航跳转时, 如何传值给路由页面?
to="/path?参数名=值"
to=“/path/值” (需在路由规则里配置/path/:参数名)
2. 如何接收路由传值?
$route.query.参数名
$route.params.参数名
4.2.1 第一种传值
// 方式1:
// to="/path?参数名=值"
// 接收: $route.query.参数名
![](https://img-blog.csdnimg.cn/img_convert/2159b10530ecdf7316063737a4d4e981.png)
![](https://img-blog.csdnimg.cn/img_convert/6a6cb50a2ff1cedfec99ac66180355f4.png)
4.2.2 第二种传值
// 方式2:
// (1): 路由规则path上 定义 /path/:参数名
// (2): to="/path/值"
// 接收: $route.params.参数名
![](https://img-blog.csdnimg.cn/img_convert/51902fa97e9f653f09caeb5118a9033c.png)
![](https://img-blog.csdnimg.cn/img_convert/d8c128b045cce26a1bad5233d1e3005d.png)
五 重定向
网页第一次打开没有默认的页面?怎么解决?
![](https://img-blog.csdnimg.cn/img_convert/84bd1682b86dab51c118877cd600a477.png)
1. 如何监测默认路由?
规则里定义path: '/'
2. 如何重定向路由路径?
redirect配置项, 值为要强制切换的路由路径
六 路由-404
问题1: 当你访问不存在的页面会显示什么?
问题2: 当我们访问的路由路径不存在应该怎么办?
如何给路由体系里设置404页面?
在数组最后一个位置, 插入匹配*的规则, 展示404页面
![](https://img-blog.csdnimg.cn/img_convert/e0b5ec64df1c3cd3193ed23a50b9cb6d.png)
// 404在最后(规则是从前往后逐个比较path)
七 路由模式
![](https://img-blog.csdnimg.cn/img_convert/26990e1b4d0581d7ceb156def07182d7.png)
![](https://img-blog.csdnimg.cn/img_convert/fec1d63a754a2b6f9630846f13bae82e.png)
八 编程式导航
8.1 编程式导航
![](https://img-blog.csdnimg.cn/img_convert/5b39cf5b4c703c35e9f31dd24cac6be0.png)
JS如何切换路由路径?
this.$router.push()配置path/name
要和路由规则数组里对应
用path跳转:
![](https://img-blog.csdnimg.cn/img_convert/c8a1e6e98e8cc5faaec52164d3943db1.png)
用name 跳转:
![](https://img-blog.csdnimg.cn/img_convert/1e9e714ff14a28f890bac099e586fe2e.png)
8.2 编程式导航 -跳转传参
![](https://img-blog.csdnimg.cn/img_convert/4b0541c66562ed300936c5cb444612b6.png)
![](https://img-blog.csdnimg.cn/img_convert/88212d4af2f146c028e5ed77bdd0bb08.png)
// 目标: 编程式导航 - 跳转路由传参
// 方式1:
// params => $route.params.参数名
// 方式2:
// query => $route.query.参数名
// 重要: path会自动忽略params
// 推荐: name+query方式传参
// 注意: 如果当前url上"hash值和?参数"与你要跳转到的"hash值和?参数"一致, 爆出冗余导航的问题,
不会跳转路由
注意: 如果当前url上"hash值和?参数"与你要跳转到的"hash值和?参数"一致, 爆出冗余导航的问题,
不会跳转路由
![](https://img-blog.csdnimg.cn/img_convert/c86041bde13c8e14cb6778f0845d0a90.png)
九 路由嵌套
![](https://img-blog.csdnimg.cn/img_convert/e5db1a2b5bba05efa7d300dad5e027b4.png)
![](https://img-blog.csdnimg.cn/img_convert/830cdfe77598895a37616c81e9197764.png)
例如:
![](https://img-blog.csdnimg.cn/img_convert/b7db7f3b1107301185e543ff27504c16.png)
1. 二级路由如何配置?
创建需要的二级页面组件
路由规则里children中配置二级路由规则对象
一级页面中设置router-view显示二级路由页面
2. 二级路由注意什么?
二级路由path一般不写根路径/
跳转时路径要从/开始写全
十 声明式导航 – 类名区别
![](https://img-blog.csdnimg.cn/img_convert/d99c7c4754dd684e1818126a03dfe4d8.png)
![](https://img-blog.csdnimg.cn/img_convert/5883e88942d2d27956bd730e80cf39c3.png)
1. 自动添加的2个类名的区别?
router-link-exact-active – url的hash值和href完全匹配
router-link-active – url的hash值包含href路径值匹配
十一 全局前置守卫
![](https://img-blog.csdnimg.cn/img_convert/861aeaf2acad0a94446c450976ba6013.png)
什么是路由守卫?
路由在真正跳转前, 会执行一次beforeEach函数, next调用则跳转, 也可以强制修改要跳转的路由
例如:
![](https://img-blog.csdnimg.cn/img_convert/9810f1ae084dfbb81432807c992732b9.png)