一、作用:
它可以帮我们在路由发生跳转,到导航结束的时间内,做一些相应的逻辑处理,分为:全局守卫,和专项守卫
1、全局收尾:
(a)、前置守卫:router.beforeEach(to,from,next),router实例的beforeEach方法能够注册一个全局前置守卫,,用途例如做典型的登陆判断,to表示的是即将跳转的路由对象,from表示当前将要离开的路由对象,next是一个函数,如果确定要跳转,那么就将用到next函数
//如果即将访问的页面不是登录页面,如果已经登录,那么直接执行next 直接跳转
if (to.name !== 'login') {
if (HAS_LOGINED) next()
else next({ name: 'login' }) //如果没有登录,那么直接跳转到登录页面,组件name属性为login
} else {
if (HAS_LOGINED) next({ name: 'home' }) //如果跳转的是登录页面,并且已经是登录状态,那么直接跳转到首页
else next() //否则,放行,继续到登录页面
}
(b)、后置钩子:所有的页面跳转之后做一些操作,比如一个登录动作,当页面加载完毕后,加一个后置钩子,就可以将正在登录状态关闭掉
router.afterEach((to, from) => {
// logining = false
})
(c)、router.beforeResolve,也是一个全局守卫,它是在导航被确认(所有导航钩子结束)之前,所有组件内守卫和异步路由组件被解析之后调用,参数与router.beforeEach一样:(to,from,next)
(d)、路由独享守卫:beforeEnter(to, from, next)路由列表里配置
(e)、组件内守卫:每一个组件都有3个钩子
(1)、beforeRouteEnter(to, from, next),to代表当前路由对象,from表示上一个路由对象,渲染该组件对应路由被确认前调用,就是说页面被触发,已经确定调用页面,但页面还没有渲染的时候,所以this是获取不到当前组件的实例的
(2)、beforeRouteLeave(to, from, next), 比如页面进行了编辑,在用户要离开的时候,就需要提醒一下用户“编辑内容未保存,是否真的要离开”
beforeRouteLeave (to, from, next) {
const leave = confirm('您确定要离开吗?')
if (leave) next() //如果选择的是leave==确定离开 直接通过next函数跳转
else next(false) //否则,直接将函数设置为false,不做跳转
},
(3)、beforeRouteUpdate:路由(RUL)被发生变化,组件被复用的时候调用,一般是url第二次变化的时候出现的逻辑处理,此时页面已经渲染,所有使用this是可以访问到当前实例的(){}
总结:、beforeRouteUpdate、beforeRouteLeave因为已经访问到当前实例,因此可以用this,只有、beforeRouteEnter不可以,因为还未实现跳转,但可以在next里通过(vm => { console.log(vm) })回调函数来取当前实例
二、完整的导航解析流程:
1、导航触发
2、在失活的组件(即将离开的页面组件)里调用离开守卫:beforeRouteLeave
3、调用全局的前置守卫 beforeEach
4、在复用的组件里调用 beforeRouteUpdate || 不是复用组件就调用 beforeRouteEnter
5、调用路由独享守卫 beforeEnter(在路由列表里配置)
6、解析异步路由组件
7、在被激活的组件(即将进入的组件页面)里调用 beforeRouteEnter
8、调用全局的解析守卫 beforeResolve
9、导航被确认
10、调用全局的后置守卫 afterEach
11、触发DOM的渲染
12、用创建好的实例调用beforeRouteEnter守卫传给next的回调函数
Vue-admin工作整理(五):守卫导航的更多相关文章
-
AntDesign vue学习笔记(五)导航菜单动态加载
一般的后台系统都有一个树形导航菜单,具体实现如下,主要参考https://my.oschina.net/u/4131669/blog/3048416 "menuList": [ { ...
-
Vue的路由动态重定向和导航守卫
一.重定向 重定向也是通过 routes 配置来完成,下面例子是从 /a 重定向到 /b: const router = new VueRouter({ routes: [ { path: '/a', ...
-
Vue-admin工作整理(二):项目结构个人配置
通过上一篇文章(Vue-admin工作整理(一):项目搭建)操作完毕后,基础项目已经搭建,下面就要对项目本身进行一下项目结构调整来符合自己的项目要求 1.首先要对package.json文件进行调整, ...
-
vue路由知识整理
vue路由知识整理 对于单页应用,官方提供了vue-router进行路由跳转的处理.我们已经可以通过组合组件来组成应用程序,当你要把 vue-router 添加进来,我们需要做的是,将组件(compo ...
-
[vue ]滚动视图解决ElementUI NavMenu 导航菜单过长显示的问题
记录一下工作 需求 导航菜单过长的时候会溢出,需要一个像 Tabs 标签页一样的滚动视图容器,可以左右滚动内部视图. 解决方法 由于时间问题,所以直接将 Tabs 源码抽取出来使用. 这里要做一些特殊 ...
-
Vue Admin - 基于 Vue &; Bulma 后台管理面板
Vue Admin 是一个基于 Vue 2.0 & Bulma 0.3 的后台管理面板(管理系统),相当于是 Vue 版本的 Bootstrap 管理系统,提供了一组通用的后台界面 UI 和组 ...
-
15:element/Vue Admin
1.1 简介 1.Vue Admin 简介 1. Vue Admin 是一个基于 Vue 2.0 & Bulma 0.3 的后台管理面板(管理系统),相当于是 Vue 版本的 Bootstra ...
-
Vue技术点整理-前言
前言 Vue版本说明:本文档编写时,Vue稳定版本为 2.6.10 本文档编写目的为:整理Vue相关生态的技术点.和开发中经常使用到的技术点,让开发者快速上手开发,提升开发效率 一,Vue开发工具:本 ...
-
解决vue组件内前置路由守卫beforeRouteEnter无法获取上下文this
问题描述 vue框架,只有在报名页面报名成功,然后自动跳转到订单详情,才弹出一个引流弹窗,其他情况均不弹出,我就想到使用vue 的组件内前置守卫beforeRouteEnter来实现.beforeRo ...
-
Vue基础系列(五)——Vue中的指令(中)
写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...
随机推荐
-
Navicat Premium 的常用功能
1.快捷键 1.1. F8 快速回到当前对象列表 1.2. Ctrl + q 打开查询界面 1.3. Ctrl + d 快速修改当前的表结构 1.4. Ctrl + r 运行当前查询界面里面的 sql ...
-
初学c# -- 学习笔记(七) RichTextBox支持GIF
园子里许明吉博客写的一篇,刚好用到这个,写的非常好.转过来了 不过在应用中也有一些问题,win10下不能中文输入,凑合着进行了修改, 下面是原来的代码: private void button2_Cl ...
-
十五天精通WCF——第五天 你需要了解的三个小技巧
一: 服务是端点的集合 当你在开发wcf的时候,你或许已经注意到了一个service可以公布多个endpoint,确实是这样,在wcf中有一句很经典的话,叫做“服务是端点的集合",就 比如说 ...
-
FIN_WAIT1 能持续多久?你知道吗
FIN_WAIT1 能持续多久?你知道吗 2016-01-12 运维帮 原文:http://blogread.cn/it/article/7215?f=wb&luicode=10000359 ...
-
Day16作业及默写
hashlib模块,写函数校验两个文件是否内容相同(如果这两个文件很大) import hashlib md5 = hashlib.md5() md5.update(b'hello') md5.upd ...
-
2017-2018-2 20155230《网络对抗技术》实验1:PC平台逆向破解(5)M
1.直接修改程序机器指令,改变程序执行流程 2.通过构造输入参数,造成BOF攻击,改变程序执行流 3.注入Shellcode并执行 4.实验感想 注:因为截图是全屏所以右键图片在新的标签页打开观看更加 ...
-
nginx安装报错:configure: error: the HTTP rewrite module requires the PCRE library
参考:http://blog.51cto.com/williamx/958398 需要安装pcre-devel与openssl-devel yum -y install pcre-devel open ...
-
第73天:jQuery基本动画总结
一.DOM对象跟jQuery对象相互转换 jQuery对象转换成DOM对象: 方式一:$(“#btn”)[0] 方式二:$(“#btn”).get(0) DOM对象转换成jQuery对象: $(doc ...
-
Windows运行命令集锦
开始菜单中的“运行”(Win+R)是通向程序的快捷途径,输入特定的命令后,即可快速的打开Windows的大部分程序,熟练的运用它,将给我们的操作带来诸多便捷. winver 检查Windows版本 ...
-
Java 三大特征之--多态
http://www.cnblogs.com/chenssy/p/3372798.html