一、作用:

  它可以帮我们在路由发生跳转,到导航结束的时间内,做一些相应的逻辑处理,分为:全局守卫,和专项守卫

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工作整理(五):守卫导航的更多相关文章

  1. AntDesign vue学习笔记(五)导航菜单动态加载

    一般的后台系统都有一个树形导航菜单,具体实现如下,主要参考https://my.oschina.net/u/4131669/blog/3048416 "menuList": [ { ...

  2. Vue的路由动态重定向和导航守卫

    一.重定向 重定向也是通过 routes 配置来完成,下面例子是从 /a 重定向到 /b: const router = new VueRouter({ routes: [ { path: '/a', ...

  3. Vue-admin工作整理(二):项目结构个人配置

    通过上一篇文章(Vue-admin工作整理(一):项目搭建)操作完毕后,基础项目已经搭建,下面就要对项目本身进行一下项目结构调整来符合自己的项目要求 1.首先要对package.json文件进行调整, ...

  4. vue路由知识整理

    vue路由知识整理 对于单页应用,官方提供了vue-router进行路由跳转的处理.我们已经可以通过组合组件来组成应用程序,当你要把 vue-router 添加进来,我们需要做的是,将组件(compo ...

  5. [vue ]滚动视图解决ElementUI NavMenu 导航菜单过长显示的问题

    记录一下工作 需求 导航菜单过长的时候会溢出,需要一个像 Tabs 标签页一样的滚动视图容器,可以左右滚动内部视图. 解决方法 由于时间问题,所以直接将 Tabs 源码抽取出来使用. 这里要做一些特殊 ...

  6. Vue Admin - 基于 Vue & Bulma 后台管理面板

    Vue Admin 是一个基于 Vue 2.0 & Bulma 0.3 的后台管理面板(管理系统),相当于是 Vue 版本的 Bootstrap 管理系统,提供了一组通用的后台界面 UI 和组 ...

  7. 15:element/Vue Admin

    1.1 简介 1.Vue Admin 简介 1. Vue Admin 是一个基于 Vue 2.0 & Bulma 0.3 的后台管理面板(管理系统),相当于是 Vue 版本的 Bootstra ...

  8. Vue技术点整理-前言

    前言 Vue版本说明:本文档编写时,Vue稳定版本为 2.6.10 本文档编写目的为:整理Vue相关生态的技术点.和开发中经常使用到的技术点,让开发者快速上手开发,提升开发效率 一,Vue开发工具:本 ...

  9. 解决vue组件内前置路由守卫beforeRouteEnter无法获取上下文this

    问题描述 vue框架,只有在报名页面报名成功,然后自动跳转到订单详情,才弹出一个引流弹窗,其他情况均不弹出,我就想到使用vue 的组件内前置守卫beforeRouteEnter来实现.beforeRo ...

  10. Vue基础系列(五)——Vue中的指令(中)

    写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...

随机推荐

  1. T-SQL语言基础(2)之SQL Server体系结构

    SQL Server 体系结构 SQL Server 实例 SQL Server 实例是指安装的一个 SQL Server 数据库引擎/服务.在同一台计算机上可以安装 SQL Server 的多个实例 ...

  2. head和tail命令

    1.head head 文件名 :查看前10行 head -n 5 文件名 :查看文件的前5行 head -c 5 文件名 :查看文件的前5个字符 head -n -5 文件名   :查看文件的后5行 ...

  3. 利用data属性来存json、和取数据还原json

    data属性用JSON.stringify转化为字符串存进去,,,取出来自动会变成json数组的

  4. docker 标记和推送镜像

    打开Launchpad并定位到docker Quickstart Terminal图标. 点击Docker Quickstart Terminal图标, 打开一个窗口. 将光标定位到Docker Qu ...

  5. C语言实现迷宫小游戏

    代码如下,时间太晚,有空补注释: #include<stdio.h> #include<string.h> #include<time.h> #include< ...

  6. H.264学习--1

    1.宏块(Macro Block):一个编码图像首先要划分成多个块(4x4 像素)才能进行处理,显然宏块应该是整数个块组成,通常宏块大小为                               ...

  7. mongo中常用的增删改查

    db.students.find();//按性别分组,并显示每组的姓名db.students.aggregate({ $group:{ _id:'$sex', name:{$push:'$name'} ...

  8. js闭包讲解

    今日看到之前写的一段js代码,关于导航部分鼠标放上去变类,鼠标离开等效果 前端代码 <div class="con12"> <div class="le ...

  9. 第一个Spring程序HelloWorld

    对于初学者而言,任何理论化的讲解都比不上一个简单的HelloWorld,我们在学习Spring时也不外乎用最简单的HelloWorld程序来将这个灵活而又强大的轻量级框架推送到诸位面前.想要说明的是现 ...

  10. 网络-04-端口号-linux端口详解大全--TCP注册端口号大全

    # John Murphy <john.m.murphy&mci.com>afs3-fileserver 7000/tcp file server itselfafs3-files ...