目录

1.导航钩子的作用

2.导航钩子的分类

3.全局守卫

4.路由独享守卫

5.局部守卫

6.路由跳转导航解析流程,当由A路由–>B路由的时候


1.导航钩子的作用

  • vue-router提供的导航钩子主要用来拦截导航,让它完成跳转或取消。

2.导航钩子的分类

3.全局守卫

是指路由示例上直接操作的钩子函数,特点是所有路由配置的组件都会触发。简单点说就是触发路由就会触发这些钩子函数。钩子函数执行顺序包括beforeEach、beforeResolve、afterEach三个。

[beforeEach]:在路由跳转前触发,参数包括to,from,next三个,这个钩子作用主要是用于登录验证,也就是路由还没跳转提前告知,以免跳转了再通知就为时已晚。

 router.beforeEach  router.beforeResolve  router.afterEachconst router = new VueRouter({ ... });router.beforeEach((to, from, next) => {// do someting});
  • to:代表要进入的目标,它是一个路由对象
  • from:代表当前正要离开的路由,同样也是一个路由对象
  • next:这是一个必须需要调用的方法,而具体的执行效果则依赖next方法调用的参数

[beforeResolve]:这个钩子和beforeEach类似,也是路由跳转前触发,参数也是to,from,next三个,和beforeEach区别官方解释为:

 区别是在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后,解析守卫就会被调用。

即在beforeEach和组件内beforeRouteEnter之后,afterEach之后,afterEach之前调用。

[afterEach]:和beforeEach相反,它是在路由跳转完成之后触发,参数包括to、from,没有了next,它发生在beforeEach和beforeResolve之后,beforeRouteEnter(足迹按内守卫)之前。

const router = new VueRouter({ ... });router.beforeEach((to, from, next) => {// do someting});//全局后置钩子,后置钩子并没有 next 函数,也不会改变导航本身router.afterEach((to, from) => {// do someting});

4.路由独享守卫

是指在单个路由配置的时候也可以设置的钩子函数,且只能在这个路由下起作用。其位置如下,也就是像File这样的组件都存在这样的钩子函数。目前它只有一个钩子函数beforeEnter。

[beforeEnter]:和beforeEach完全相同,如果都设置则在beforeEach之后紧随执行,参数有to、from、next。

  cont router = new VueRouter({routes: [{path: '/file',component: File,beforeEnter: (to, from ,next) => {// do someting}}]});

5.局部守卫

是指在组件内执行的钩子函数,类似于数组内的生命周期函数,相当于为配置路由的组件添加的生命周期钩子函数。钩子函数按执行顺序包括beforeRouteEnter、beforeRouteUpdate(2.2新增)、beforeRouteLeave三个,执行位置如下:

 const File = {template: `<div>This is file</div>`,beforeRouteEnter(to, from, next) {// do someting// 在渲染该组件的对应路由被 confirm 前调用},beforeRouteUpdate(to, from, next) {// do someting// 在当前路由改变,但是依然渲染该组件是调用},beforeRouteLeave(to, from ,next) {// do someting// 导航离开该组件的对应路由时被调用}}

6.路由跳转导航解析流程,当由A路由–>B路由的时候

  1. 在A组件里调用离开守卫。 A组件中的beforeRouterLeave
  2. 调用全局的beforeEach守卫。 router.beforeEach
  3. 再执行B路由配置里调用beforeEnter。
routes:[{path:'/b',component:B,beforeEnter:(to,form,next)=>{..... }}]

4.再执行B组件的进入守卫。 B组件中beforeRouterEnter
5. 调用全局的beforeResolve守卫(2.5+)。 router.beforeResolve
6. 导航被确认。
7. 调用全局的afterEach钩子。 router.afterEach
8. 触发DOM更新。

“约见”面试官系列之常见面试题之第九十八篇之vue-router有哪几种导航钩子(建议收藏)相关推荐

  1. “约见”面试官系列之常见面试题之第九十五篇之vue-router的组件组成(建议收藏)

    <router-link :to='' class='active-class'> //路由声明式跳转 ,active-class是标签被点击时的样式<router-view> ...

  2. “约见”面试官系列之常见面试题之第九十四篇之MVVM框架(建议收藏)

    目录 一句话总结:vm层(视图模型层)通过接口从后台m层(model层)请求数据,vm层继而和v(view层)实现数据的双向绑定. 1.我大前端应该不应该做复杂的数据处理的工作? 2.mvc和mvvm ...

  3. “约见”面试官系列之常见面试题之第九十二篇之created和mounted区别(建议收藏)

    beforeCreate 创建之前:已经完成了 初始化事件和生命周期 created 创建完成:已经完成了 初始化注册和响应 beforeMount 挂载之前:已经完成了模板渲染 mounted :挂 ...

  4. “约见”面试官系列之常见面试题第三十八篇之js常见的继承方式(建议收藏)

    1.原型链继承 核心: 将父类的实例作为子类的原型 将构造函数的原型设置为另一个构造函数的实例对象,这样就可以继承另一个原型对象的所有属性和方法,可以继续往上,最终形成原型链 父类 // 定义一个动物 ...

  5. “约见”面试官系列之常见面试题之第九十九篇之router和route(建议收藏)

    1.router是VueRouter的一个对象,通过Vue.use(VueRouter)和VueRouter构造函数得到一个router的实例对象,这个对象中是一个全局的对象,他包含了所有的路由包含了 ...

  6. “约见”面试官系列之常见面试题之第九十九篇之router的钩子函数(建议收藏)

    当使用路由参数时,例如从 /user/aside导航到 /user/foo,原来的组件实例会被复用.因为两个路由都渲染同个组件,比起销毁再创建,复用则更加高效.不过,这也意味着组件的生命周期钩子不会再 ...

  7. “约见”面试官系列之常见面试题之第九十六篇之active-class是谁的属性(建议收藏)

    active-class 属于vue-router的样式方法,当router-link标签被点击时将会应用这个样式 一.首先,active-class是什么,active-class是vue-rout ...

  8. “约见”面试官系列之常见面试题之第九十篇之页面加载触发函数(建议收藏)

    第一次页面加载时会触发 beforeCreate, created, beforeMount, mounted 这几个钩子 本面试题为前端常考面试题,后续有机会继续完善.我是歌谣,一个沉迷于故事的讲述 ...

  9. “约见”面试官系列之常见面试题第四十四篇之webpack打包原理解析?(建议收藏)

    webpack打包是如何运行的 也可以称为,webpack是如何实现模块化的 CommonJS是同步加载模块,一般用于node.因为node应用程序运行在服务器上,程序通过文件系统可以直接读取到各个模 ...

最新文章

  1. 三大软件公司争霸赛区块链
  2. CSDN 插件限时内测,新用户抢永久免费去广告特权!
  3. awk 系列:awk 怎么读取标准输入(STDIN)
  4. 解决安卓机在微信上播放视频有广告问题
  5. ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-上 )
  6. mysql安装check requirements出错_超详细的MySQL8.0.17版本安装教程
  7. Jenkins自动化部署容器
  8. java小工程_Java进阶:阶段性小工程
  9. SlickEdit 的宏解析设置方法
  10. 零基础学Python--------第3章 流程控制语句
  11. 一个单独的UDP数据包能够放入数据的最大长度是65508
  12. MATLAB输出白色背景图片
  13. java io 系列(转载skywang12345)
  14. 信号发生器和任意波形发生器的区别
  15. 给学妹学弟们的看书小建议!
  16. C语言程序设计笔记(浙大翁恺版) 第七章:函数
  17. 博云与智领云达成战略合作,携手共研云原生大数据领域
  18. C++:实现量化Piecewise yield曲线测试实例
  19. 13c语言——运算符
  20. 用爬虫收集网站公开数据丨Python爬虫实战系列(5)

热门文章

  1. Flask构建微电影(二)
  2. There is no public key available for the following key IDs:3B4FE6ACC0B21F32
  3. Axure RP 8.0正式版下载地址 安装和汉化说明
  4. Handler的一个图片轮播程序
  5. abiword class list
  6. java循环一年月份天数和_javawhile循环编写输入某年某月某日,判断这一天是这一年的第几…...
  7. 神舟笔记本bios_海尔雷神(蓝天)神舟战神游戏本风扇狂转掉电大写灯狂闪维修实例...
  8. lxml学习【未完成】
  9. MAC下secureCRT无法保存密码的解决方法
  10. [react] 写出React动态改变class切换组件样式