博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS每日一题:Vue-router有哪些钩子?使用场景?
阅读量:6371 次
发布时间:2019-06-23

本文共 1640 字,大约阅读时间需要 5 分钟。

20190218问

Vue-router有哪些钩子?使用场景?

router的实现可以点

前面我们用大白话讲过什么是钩子,这里在重复一下,就是在什么什么之前,什么什么之后,英文叫hooks,专业点叫生命周期,装逼点可以叫守卫...

vue-router中也存在钩子的概念,分为三步记忆

  • 全局守卫
  • 路由独享守卫
  • 组件独享守卫
全局守卫

很好理解,全局守卫就是能监听到全局的router动作

  • router.beforeEach 路由前置时触发
const router = new VueRouter({ ... })// to 要进入的目标路由对象// from 当前的路由对象// next resolve 这个钩子,next执行效果由next方法的参数决定// next() 进入管道中的下一个钩子// next(false) 中断当前导航// next({path}) 当前导航会中断,跳转到指定path// next(error) 中断导航且错误传递给router.onErr回调// 确保前置守卫要调用next,否然钩子不会进入下一个管道router.beforeEach((to, from, next) => {  // ...})
  • router.afterEach 路由后置时触发
// 与前置守卫基本相同,不同是没有next参数router.afterEach((to, from) => {  // ...})
  • router.beforeResolve

跟router.beforeEach类似,在所有组件内守卫及异步路由组件解析后触发

路由独享守卫

参数及意义同全局守卫,只是定义的位置不同

const router = new VueRouter({  routes: [    {      path: '/',      component: Demo,      beforeEnter: (to, from, next) => {        // ...      },      afterEnter: (to, from, next) => {        // ...      },          }  ]})
组件独享守卫

组件内新一个守卫, beforeRouteUpdate,在组件可以被复用的情况下触发,如 /demo/:id, 在/demo/1 跳转/demo/2的时候,/demo 可以被复用,这时会触发beforeRouteUpdate

const Demo = {  template: `...`,  beforeRouteEnter (to, from, next) {    ...  },  // 在当前路由改变,但是该组件被复用时调用  beforeRouteUpdate (to, from, next) {    ...  },  beforeRouteLeave (to, from, next) {    ...  }}
  • 注意在beforeRouteEnter前不能拿到当前组件的this,因为组件还有被创建,我们可以通过next(vm => {console.log(vm)}) 回传当前组件的this进行一些逻辑操作

使用场景

路由进入前最典型的可以做一些权限控制, 路由离开时清除或存储一些信息,任务等等

总结

vue-router中钩子分为全局的,局部的,以及组件三种形式, 他们都有前置守卫以及后置守卫, 其中组件的前置守卫不能拿到当前组件的this,因组件还没有被创建,可以通过next的参数进行回传this,前置守卫必须调用next方法,否则不会进入下一个管道

关于JS每日一题

JS每日一题可以看成是一个语音答题社区

每天利用碎片时间采用60秒内的语音形式来完成当天的考题
群主在次日0点推送当天的参考答案

  • 注 绝不仅限于完成当天任务,更多是查漏补缺,学习群内其它同学优秀的答题思路

转载地址:http://ejyqa.baihongyu.com/

你可能感兴趣的文章
Python import其他文件夹的文件
查看>>
Jvm(22),回收策略-----标记清除算法
查看>>
MySQL多表关联查询效率高点还是多次单表查询效率高,为什么?
查看>>
UNIX 高手的 10 个习惯
查看>>
传值与传引用
查看>>
HDU 1538 A Puzzle for Pirates(海盗分金问题)
查看>>
C# Web Forms - Using jQuery FullCalendar
查看>>
Sublime-Text-2-pydocstring --- 自动生成python docstring的插件
查看>>
UNIX进程环境
查看>>
学习面试题Day03
查看>>
我最喜欢的jQuery插件模板
查看>>
【云计算】Docker 多进程管理方案
查看>>
[LeetCode] Best Meeting Point 最佳开会地点
查看>>
基于InstallShield2013LimitedEdition的安装包制作
查看>>
【转】从Shell脚本内部将所有标准输出及标准错误显示在屏幕并同时写入文件的方法...
查看>>
Python中的图形库
查看>>
Linux操作系统分析 ------------------中国科技大学
查看>>
Apache多站点实现原理和配置
查看>>
javascript类型系统——包装对象
查看>>
Android4.4中不能发送SD卡就绪广播
查看>>