Vue笔记[二]-路由篇
基本使用
官方文档:vue-router
安装
npm i vue-router
,默认安装的是最新版本(只支持 Vue3,Vue2 需要指定版本vue-router@3
)
使用步骤
- 创建路由器
- 注册路由
- 使用路由
- 编写路由组件
注意:
- 不断切换路由时,路由组件在重复地销毁和挂载,即重复地经过完整的生命周期
- vue-router 插件会向 vm 和 vc 身上添加
$route
(当前路由) 和$router
(全局路由器) 两个属性
创建路由器
在 src 目录下新建router/index.js
使用new VueRouter()
的方式来创建路由器实例
1 | import VueRouter from 'vue-router'; |
路由规则可以将其提取到当前文件夹的一个文件routes.js
1 | import Home from '@/views/Home'; |
注册路由
在实例化 Vue 对象的时候将创建好的路由器实例当作配置信息
1 | import Vue from 'vue'; |
使用路由
vue-router提供了特殊的标签来使用路由
<router-link>
会自动读取当前的路由模式(hash/history/abstract),并将其自动解析成<a>
标签
<router-view>
将指定路由页面显示,如果在<router-view>
里面还会使用到<router-view>
,那里面的路由信息应该是外面的子路由
编写路由组件
一般将路由组件放到src/views
中,声明某个路由地址对应某个页面
路由模式
路由模式决定了:
- 路由从哪里获取访问路径
- 路由如何改变访问路径
vue-router
提供了三种路由模式:
hash:默认值。路由从浏览器地址栏中的 hash 部分获取路径,改变路径也是改变的 hash 部分。该模式兼容性最好。
1
2http://localhost:8081/#/blog --> /blog
http://localhost:8081/about#/blog --> /bloghistory:路由从浏览器地址栏的
location.pathname
中获取路径,改变路径使用的 H5 的history api
。该模式可以让地址栏最友好,但是需要浏览器支持history api
1
2
3http://localhost:8081/#/blog --> /
http://localhost:8081/about#/blog --> /about
http://localhost:8081/blog --> /blogabstract:路由从内存中获取路径,改变路径也只是改动内存中的值。这种模式通常应用到非浏览器环境中。
1
2
3内存: / --> /
内存: /about --> /about
内存: /blog --> /blog
无刷新跳转
在点击链接后页面刷新会做下面几件事情
- 请求 index.html
- 请求各种
*.js
- 请求各种
*.css
- 执行 js
- 创建 vue 应用
- 渲染全部组件树
- 挂载到指定的 div 中
但如果不刷新进行跳转:
- 执行一段 js 代码:切换某个区域的组件
普通点击跳转实现的是:location.href='/'
无刷新跳转实现的是:history.pushState(null, null, '/')
将原本的 a 标签改写
1 | <a href="https://www.baidu.com"></a> |
路径匹配样式
默认情况下,vue-router
会用 当前路径 匹配 导航路径 :
- 如果当前路径是以导航路径开头,则算作匹配,会为导航的 a 元素添加类名
router-link-active
- 如果当前路径完全等于导航路径,则算作精确匹配,会为导航的 a 元素添加类名
router-link-exact-active
可以为组件RouterLink
添加 bool 属性exact
,将匹配规则改为:必须要精确匹配才能添加匹配类名router-link-active
另外,可以通过active-class
属性更改匹配的类名,通过exact-active-class
更改精确匹配的类名
命名路由
使用命名路由可以解除系统与路径之间的耦合
1 | // 路由配置 |
1 | <!-- 向to属性传递路由信息对象 RouterLink会根据你传递的信息以及路由配置生成对应的路径 --> |