Vue学习之路由(Router)
Vue学习之 路由(Router)
文章目录
- Vue学习之 路由(Router)
- 一、路由是什么?
- 二、Vue Router的安装
- 1.直接下载/CDN
- 2.NPM安装
- 三、路由的基础使用
- 1.定义路由组件
- 2.定义路由
- 3. 创建Router实例
- 4.注册路由
- 5.使用路由
- 四、动态路由
- 1.动态匹配
- 2.响应路由参数的变化
- 五.路由守卫
- 1.全局守卫
- 2.路由独享守卫
- 3.组件内部守卫
- 六、嵌套路由
- 总结:
一、路由是什么?
在计算机网络原理中,路由是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。可以想象为快递转运站,根据包裹的地址信息将快递送到指定地点。
在web中的路由也是类似的,route根据url的不同来跳转到相应的url页面
Vue提供了路由的组件Vue Router
二、Vue Router的安装
1.直接下载/CDN
资源地址:https://unpkg.com/vue-router/dist/vue-router.js
2.NPM安装
npm install vue-router
三、路由的基础使用
1.定义路由组件
路由要有映射的组件
let myA = {template:`<div>A组件</div>`}let myB = {template:`<div>B组件</div>`}
2.定义路由
let routes = [{path: '/',component: myA,//路由重定向redirect: '/a',//redirect: { name: 'aRoute' },},{path: '/a',component: myA,name: 'aRoute',alias: '/aa',},{path: '/b',component: myB}];
一个最基础的路由对象有这两个属性:
path:路由地址
component:映射的组件
除此之外,Router还有一些其他属性
name:名称,可方便以后的跳转
alias:别名,可以通过别名来访问路由
redirect:路由重定向,比如你想让组件一开始就在某个路由上,就可以用重定向。
当用户访问 /时,URL 将会被替换成 /a,然后匹配路由为 /a.
3. 创建Router实例
//2.创建路由器对象let router = new VueRouter({routes: routes})
4.注册路由
new Vue({el: '#app',router: router,data: {msg: 'hello'},methods: {},})
这里的router就是用来注册路由器的。
5.使用路由
<div id='app'><!-- 使用路由 --><div><router-link to="/a">去A路由</router-link><router-link to="/b">去B路由</router-link><a href="#/a">a标签去A路由</a></div><div><!-- 组件显示的位置 --><router-view></router-view></div></div>
这里 <router-link></router-link>
的显示效果和a标签是一样。你同样可以是啊标签来进行路由的跳转
四、动态路由
我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件。例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来显示不同的内容。那么,我们可以使用动态路由
1.动态匹配
{path: '/user/id/:id/username/:username',component: myA,},
动态路由在路由地址上使用冒号来接受数值。
<router-link to="/user/id/1/username/zhangsan">去A路由</router-link>
当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用。
2.响应路由参数的变化
如果我们想要页面根据路由路径参数的不同去做相应的变化,可以有几种方式
最简单就是watch监听
<div id='app'><!-- 使用路由 --><div><router-link to="/user/id/1/username/zhangsan">去A路由</router-link><router-link to="/b">去B路由</router-link></div><div><router-view></router-view></div></div><script>let myA = {data() {return {id: null,username: ''}},template:`<div>A组件{{id}}--{{username}}</div>`, //监听watch: {$route(to, from) {// to是新路由,from是旧路由 // console.log(to, from);this.id = to.params.id;this.username = to.params.username;}}}let myB = {template:`<div>B组件</div>`}let routes = [{path: '/user/id/:id/username/:username',component: myA},{path: '/b',component: myB}];let router = new VueRouter({routes: routes})new Vue({el: '#app',router: router,data: {msg: 'hello'},methods: {},})</script>
监听是Vue中的方法,Vue router还提供了路由守卫(也叫导航守卫),路由守卫是专门用来监听路由的
五.路由守卫
1.全局守卫
全局守卫定义在全局作用域中,所有的路由变化都会触发该守卫
全局守卫有两种:前置和后置,分别在路由改变前后执行
//前置守卫router.beforeEach((to, from, next) => {console.log(to, from, next, '-----beforeEach-----');next();})//后置守卫router.afterEach((to, from) => {console.log(to, from, '------afterEach------');})
两者都有 to 和 from,to是新路由 ,from是旧路由。
需要注意的是,前置守卫有next函数,这个函数是用来执行到下一步的,如果在前置守卫中没有next,则无法执行下一步。
2.路由独享守卫
路由独享守卫写在路由对象内部,只有在该路由内有路由变化才会触发
let routes = [{path: '/b',component: myB,// 设置路由独享守卫beforeEnter(to, from, next) {console.log(to, from, next, '------beforeEnter------');next();}}];
3.组件内部守卫
组件内守卫写在组件内部,只有在该组件的路由变化才会触发该守卫
组件内守卫有三种,分别在进入路由、更新路由、离开路由时触发
let myA = {template:`<div>A组件</div>`,// 2.3 组件内守卫beforeRouteEnter(to, from, next) {console.log('------beforeEnter------');next();},beforeRouteUpdate(to, from, next) {console.log('------RouteUpdate------');next();},beforeRouteLeave(to, from, next) {console.log('------RouteLeave------');next();}}
六、嵌套路由
实际生活中的应用界面,通常由多层嵌套的组件组合而成。在不同层级都有<router-view></router-view>
,这就可能产生问题,当点击最下层的路由时,路由组件可能会显示在最上层的<router-view></router-view>
上,这就需要使用给路由设置层级的父子关系。
给路由设置子路由要使用children
let routes = [{path: '/student',component: Student,},{path: '/course',component: Course,children: [{path: 'grade',component: CourseGrade,},{path: 'plan',component: CoursePlan,},]},]
有了层级关系之后,Vue在渲染的时候就会根据这个层级关系,找到合适<router-view></router-view>
再进行渲染。
总结:
今天总结的内容较多,Router是Vue中非常重要的一个东西,在做项目的时候会经常用到,这里整理的都是一些比较常用的东西,还有一些别的内容我会后续在整理出来
Vue学习之路由(Router)相关推荐
- Vue学习记录-路由
什么是路由 **后端路由:**对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源: **前端路由:**对于单页面应用程序来说,主要通过URL中的hash(#号)来实现 ...
- vue工程化与路由router
一.介绍 vue.js 是 目前 最火的前端框架,vue.js 兼具 angular.js 和 react.js 的优点,并剔除它们的缺点.并且提供了很多的周边配套工具 如vue-router .vu ...
- vue学习笔记——路由
1 路由配置 在vue.config中配置,则在代码中可以使用 @来表示src目录下 import aa from '@/aa/index.js' 2 单页面可以懒加载 3 创建动态路由 路由中定义: ...
- vue 学习笔记—路由篇
一.关于三种路由 动态路由 就是path:good/:ops 这种 用 $route.params接收 <router-link>是用来跳转 <router-view> ...
- vue学习 32路由精讲之二级路由和三级路由
分级时,默认打开指定下级的路由,使用redirect属性,其值为子级路由的路径path. 子级使用属性children: 值为数组,数组中每个元素都是一个路由对象 二级路由 在main.js中配置路由 ...
- WEB前端 vue学习 vue-router讲解router.push
router.push(location) 除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现. router ...
- Vue 学习 第六天学习笔记
Vue 学习 第六天学习笔记 1.webpack 使用复习 第一步:先建立文件夹. 第二步,用webpack将其初始化,建立管理.npm 的包管理工具管理起来, npm init -y .注意{查 ...
- Vue学习--Vue项目根目录介绍(1)
文章目录 前言 一.build文件夹--webpack 配置目录 二.mock文件夹--生成随机数据,拦截ajax请求 三.node_modules--npm 加载的项目依赖模块 四.public文件 ...
- Vue 学习(十、 Vue Router - 路由插件 和 Vue 的插件原理)
文章目录 一.Vue Router - 路由插件 1. 安装 Vue Router 2. Vue Router 路由的基本使用 3. 设置 router-link 4. 编程式路由 5. 路由嵌套 6 ...
最新文章
- [转]DICOM医学图像处理:Deconstructed PACS之Orthanc
- idea未进行快捷键配置时的快捷键
- Codeforces Round #633 B. Edge Weight Assignment 结论题 + dp
- poj3714 最近点对
- NetworkManager
- python-kafka多线程快速读取consumer消费者数据,同时使用批读取与无限流读取改进
- android向web提交数据,中文乱码
- Tomcat乱码解决方法
- 兴业银行研发中心笔试题_2019兴业银行笔试真题汇编(一)_考生回忆版
- 券商股票程序化交易接口(转)
- error: crosses initialization of
- 1024 程序员节狂欢盛会,等了一年终于来了!
- 联网获取360数据,识别骚扰电话,java实现
- Spring Cloud Gateway 自定义网络响应状态码(401,500,503等等)
- 【机器学习】【隐马尔可夫模型-3】后向算法:算法详解+示例讲解+Python实现
- 乌镇互联网大会官方首次使用AI同传,搜狗为雷军提供机器翻译
- 矢量点积与矢量叉乘的微分
- 卡尔曼滤波(Kalman filter)算法
- 【软件测试】测试与开发一对欢喜冤家......
- 23计算机考研22408上岸武汉理工大学经验贴
热门文章
- 移动端调试神器vConsole
- 使用Portainer管理Docker镜像
- google authenticator 工作原理
- Android 将一张CMYK模式的图片转换成RGB模式的图片
- python蓝桥杯真题刷题打卡 | day7
- 中国风国潮设计资源合集,这样的新国风实在太美了
- linux服务器下数学软件下载,动态数学软件-GeoGebra For Linux下载V5.0.155.0官方版-西西软件下载...
- c语言编写机床宏程序,从事数控车床2年,想学宏程序
- 【2】MediaPipe面部识别
- 苹果恢复出厂设置好吗_还原手机和恢复出厂设置一样吗?原来有这么大的区别...