Vue Router 路由(路由守卫)---route
1、路由守卫 是什么
简单来说,导航守卫就是路由跳转前、中、后过程中的一些钩子函数,这个函数能让你操作一些其他的事儿,这就是导航守卫。
官方解释,vue-router提供的导航守卫主要用来通过跳转或取消的方式守卫导航。
2、路由守卫分类
导航守卫分为:全局的、组件内的、单个路由独享三种
2.1、 路由独享的 ------ 1个钩子
指在单个路由配置的时候也可以设置的钩子函数
const router = new VueRouter({routes: [{path: '/foo',component: Foo,beforeEnter: (to, from, next) => {// ...}}]
})
路由独享的钩子函数包括
- beforeEnter
与全局的beforeEach完全相同,如果都设置则在beforeEach之后紧随执行,参数to、from、next
2.2 全局的 ------ 2个钩子
指路由实例上直接操作的钩子函数,他的特点是所有配置路由的组件都会触发
const router = new VueRouter({ ... })router.beforeEach((to, from, next) => {
// ...
})
全局路由的钩子函数包括
- beforeEach
在路由跳转前触发,参数包括to,from,next(参数会单独介绍)三个,这个钩子作用主要是用于登录验证 - beforeResolve(2.5+)
这个钩子和beforeEach类似,也是路由跳转前触发,参数也是to,from,next三个,与beforeEach的区别参考官网。 - afterEach
- 是在路由跳转完成后触发,参数包括to,from,它发生在beforeEach和beforeResolve之后,beforeRouteEnter(组件内守卫)之前。
2.3 组件内的------ 3个钩子
指在组件内执行的钩子函数,类似于组件内的生命周期
<template>...
</template>
export default{data(){//...},beforeRouteEnter (to, from, next) {// 在渲染该组件的对应路由被 confirm 前调用// 不!能!获取组件实例 `this`// 因为当守卫执行前,组件实例还没被创建},beforeRouteUpdate (to, from, next) {// 在当前路由改变,但是该组件被复用时调用// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。// 可以访问组件实例 `this`},beforeRouteLeave (to, from, next) {// 导航离开该组件的对应路由时调用// 可以访问组件实例 `this`}
}
组件内的路由钩子函数包括
beforeRouteEnter
路由进入组件之前调用,参数包括to,from,next。该钩子在全局守卫beforeEach和独享守卫beforeEnter之后
,全局beforeResolve和全局afterEach之前调用,要注意的是该守卫内访问不到组件的实例
,也就是this为undefined,也就是他在beforeCreate生命周期前触发
。beforeRouteUpdate
在当前路由改变时,并且该组件被复用时调用,可以通过this访问实例。参数包括to,from,next。beforeRouteLeave
导航离开该组件的对应路由时调用,可以访问组件实例this,参数包括to,from,next。
3、路由守卫回调参数
to:目标路由对象;
from:即将要离开的路由对象;
next:他是最重要的一个参数,他相当于佛珠的线,把一个一个珠子逐个串起来。
next()详解:
1.但凡涉及到有next参数的钩子,必须调用next() 才能继续往下执行下一个钩子,否则路由跳转等会停止。
2.当然next可以这样使用,next(’/’) 或者 next({ path: ‘/’ }): 跳转到一个不同的地址。意思是当前的导航被中断,然后进行一个新的导航。可传递的参数与router.push中选项一致。
3.如果要中断当前的导航要调用next(false)。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到from路由对应的地址。(主要用于登录验证不通过的处理)
4.在beforeRouteEnter钩子中next((vm)=>{})
内接收的回调函数参数为当前组件的实例vm,这个回调函数在生命周期mounted之后调用,也就是,他是所有导航守卫和生命周期函数最后执行的那个钩子。
5、路由之间跳转方式
- 5.1、直接修改地址栏中的路由地址。
- 5.2、通过router-link实现跳转
<router-link to="/myRegister">注册</router-link>
- 5.3、通过js的编程方式
这种方式只能在当前页面打开 ,无法打开一个新页面
this.$router.push('/myLogin');
如果想打开一个新页面
// 方法一 router-link
<router-link tag="a" target="_blank" :to="{name:'searchGoods',params:{catId:0},query:{keywords:'手机'}}">热门好货</router-link>// 方法二 js
let routeData = this.$router.resolve({path:'/home',query: params, //根据情况,是否传参params:{catId:params.catId} //根据情况,是否传参
});
window.open(routeData.href, '_blank');// 方法三 直接使用a标签:
<a href="http://localhost:8088/" target="_blank">{{ msg }}</a>
- 5.4、通过导航钩子中的next方法修改跳转地址
beforeRouteEnter (to, from, next) {next('/login')}
6、动态路由配制 以及 动态参数的获取
6.1 动态路由配制
在router目录下的index.js文件中,对path属性中需要动态配制地地方前面加上:
eg :
routes: [{path: '/foo/:id',component: Foo}]
6.2、 动态参数的获取
this.$route.params //params对象是所有传递过来的参数
7、router-link 路由传递参数
7.1 query传参
//query传参<router-link :to="{path:'/test',query: {name: id}}">跳转</router-link> //获取参数
this.$route.query
7.2 params传参 (也就是动态路由,通过链接传参)
//动态路由 router/index.js
routes: [{path: '/test/:id',component: Foo}] // id 是路由配制的动态参数
<router-link :to="'/test/'+id">跳转</router-link>//获取方法
this.$route.params
8、简单说明$router和$route的区别
1、$router
:是指VueRouter的实例,包含了路由跳转的方法、钩子函数等
$router操控整个路由,用法如下:
this.$router.go(-1)
// 向前或者向后跳转n个页面,n可为正整数或负整数this.$router.push('/')
// 跳转到指定url路径,history栈中会有记录,点击返回会跳转到上个页面this.$router.replace('/')
// 跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面
2、$route
:是指当前路由信息对象,每一个路由都会有一个route对象,包含path,params,hash,query,fullPath,matched,name等路由信息属性。,
即路由实例$router
跳转到的当前的路由对象$route
;
路由实例 可以包含多个 路由对象
,它们是父子包含关系,用法如下:
this.$route.params
// 获取当前路由对象传递过来的参数this.$route.query
// 获取当前路由对象传递过来的参数
9、路由组件如何响应路由参数的变化
方式一: 用
watch 检测
当前路由对象$route的变化// 监听当前路由发生变化的时候执行 watch: {$route(to, from){console.log(to.path)// 对路由变化做出响应} }
方式二: 组件内
导航钩子函数
beforeRouteUpdate(to, from, next){// to do somethings }
参考链接:https://zhuanlan.zhihu.com/p/54112006
Vue Router 路由(路由守卫)---route相关推荐
- Vue Router 实现路由控制实战
本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习. Vue Router 实现路由控制实战 前言 一.什么是单页面应用及实现前端路 ...
- 面试考问Vue Router 的路由模式,这个回答令我直接出局!
HR力荐了一个工作 4 年,目前年薪 40W+ 的候选人. 看他简历,从 HTML,CSS,JavaScript ,Vue.js ,再到React 一个都不缺,跨平台PC.移动端.小程序也都接触过,像 ...
- 你真的理解 Vue Router 的路由模式吗?
HR力荐了一个工作 4 年,目前年薪 40W+ 的候选人. 看他简历,从 HTML,CSS,JavaScript ,Vue.js ,再到React 一个都不缺,跨平台PC.移动端.小程序也都接触过,像 ...
- 面试考问Vue Router 的路由模式,这个回答令我直接出局~
HR力荐了一个工作 4 年,目前年薪 40W+ 的候选人. 看他简历,从 HTML,CSS,JavaScript ,Vue.js ,再到React 一个都不缺,跨平台PC.移动端.小程序也都接触过,像 ...
- vue router children 路由变了 组件没变_Vue.js从零开始——路由(2)
因为一些原因,我断更了几天时间,因为要准备面试 + 不在家,抱歉大家! 题图是一个大概的 Vue 模块化项目组成,当然因为我从网上找的,所以可以忽略当中的 Bulma,这其实是一个 CSS 框架,往简 ...
- 注意避坑,Vue Router 4: 路由参数在 created/setup 时不可用
有梦想,有干货,微信搜索 [大迁世界] 关注这个在凌晨还在刷碗的刷碗智. 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考 ...
- Vue Router 命名路由、(嵌套)命名视图
命名路由 在Vue Router中 除了 path 之外,还可以为任何路由提供 name. const routes = [{path: '/user/:username',name: 'user', ...
- vue router 的路由传参 params 和 query 的 区别
1. 不带参数<router-link :to="{name:'home'}"> <router-link :to="{path:'/home'}&qu ...
- vue——router更改路由地址,但是页面不能跳转
在做电商项目时,筛选标签时,需要路由发生变化,但是当前的页面商品列表还需要局部刷新. 如果更改路由后,页面跳转,则是全局刷新,局部刷新才能够满足用户需求. 则此时要做的就是:更改路由地址,但是页面不能 ...
- Vue Router 路由管理
文章目录 Vue Router 路由管理 概述 安装 简单使用 定义2个组件 定义路由信息 支持路由 使用路由 动态路由 配置动态路由 配置404 限制动态参数 嵌套路由 命名路由 编程式导航 简单使 ...
最新文章
- 按需生产 ,我们准备好了吗?
- Lock与synchronized测试区别
- c++学习02——queue
- CF Gym 101630 B Box
- php生成静态html分页实现方法
- 使用C语言----修改密码
- char*转为LPCWSTR
- [线筛五连]线筛莫比乌斯函数
- Java实现十大排序算法
- 【黑马程序员数据库】数据库基础大总结
- 边缘计算参考架构3.0
- uigetfile使用方法
- QMT量化交易网格交易 源码
- 通过PD4ML把html转pdf(包含显示页眉页脚,插入图片,显示页数)
- 重做raid后,重启无法进入系统
- 交通期刊JCR(2020)
- 学计算机前后对比的图片,大学生“修图前后”对比照,差距一目了然,男生帅气女生惊艳...
- 58到家数据库30条军规解读 【转】
- VC++流量监控程序源代码
- 女王大学 计算机专业,女王大学计算机申请要求是多少?有哪些必修课要求?...
热门文章
- 苏州珠宝玉石展览教您鉴别方法
- Js根据出生日期计算年龄
- 天数怎么换算成月_表格当中把天数换算成月怎么
- 【测试】各类视频(MP4、FLV、MKV、3GP)测试地址摘录,目前链接亲测有效!
- 一分钟读懂dB、dBm、dBw的区别
- 美国佛罗里达州立大学刘毅老师招收机器学习方向全奖博士生
- David G. Lowe课题组 Fully Automatic Multi-target Tracking System
- 基于Java框架开发OA企业在线办公系统项目教程-附源码-毕业设计
- Redis总结笔记(总结自Redis开发与运维)
- mysql中dint_MySQL基础篇(1)SQL基础