Vue-admin工作整理(五):守卫导航
一、作用:
它可以帮我们在路由发生跳转,到导航结束的时间内,做一些相应的逻辑处理,分为:全局守卫,和专项守卫
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基础系列目录 < ...
随机推荐
- HDU 2544最短路 【dijkstra 链式前向星+优先队列优化】
最开始学最短路的时候只会用map二维数组存图,那个时候还不知道这就是矩阵存图,也不懂得效率怎么样 经过几个月的历练再回头看最短路的题, 发现图可以用链式前向星来存, 链式前向星的效率是比较高的.对于查 ...
- 读书笔记一【哈希——MD5】
计算机中,将某种数据转换成指定范围内的数字数字或字母叫做哈希(散列.hashing) 哈希后的值无法像加密解密那样恢复为原文值,通常用于文件校验或数字签名等 好的散列算法应具有: 充分利用所有数据位 ...
- 学习记录----简单的原生js路由
在以前的web程序中,路由字眼只出现在后台中.但是随着SPA单页面程序的发展,便出现了前端路由一说.单页面顾名思义就是一个网站只有一个html页面,但是点击不同的导航显示不同的内容,对应的url也会发 ...
- vs2017 在win10下安装后开始运行asp.net core 项目时出错
vs2017 在win10下安装后开始运行asp.net core 项目时出错 报找不到什么 解决方法: 下载 asp.net 2.2 安装好,重新启动电脑问题解决.
- linux怎么查看进程启动,用户的工作目录,pwdx,/proc/11256/cwd
linux 通过pid 寻找程序路径的最简单命令(pwdx) #pwdx pid号1 [pid2] .... 在linux实际操作命令中,查看pid的方式有很多种,通过pid找程序路径的方式也有 ...
- vue中遇到的问题:Error: Cannot find module 'chalk'
安装 npm install chalk 如果还缺其他很多模块,那就 npm install 暴力解决问题
- Mac下创建证书失败
gdb调试运行出错,需要创建证书 按网上说的,到最后一步直接,按默认创建login类的证书 然后导出证书 再将这个证书导入到系统中
- Python3.0科学计算学习之绘图(四)
绘制三维图: mplot3d工具包提供了点.线.等值线.曲面和所有其他基本组件以及三维旋转缩放的三维绘图. 1.散点的三维数据图 from mpl_toolkits.mplot3d import ax ...
- 【备忘】mybatis的条件判断用<choose>
mybatis并没有if..else,在mybatis的sql mapper文件中,条件判断要用choose..when..otherwise. <choose> <when t ...
- python模块之re模块
# 正则表达式是用来匹配字符串的方法 # 字符串本身就有匹配方式,为什么要引入正则表达式? 因为原有的字符串匹配不出来原始的方法 # 正则匹配是用来进行模糊匹配的 s = "alex wan ...