资讯专栏INFORMATION COLUMN

JS每日一题:Vue-router有哪些钩子?使用场景?

张金宝 / 1066人阅读

摘要:问有哪些钩子使用场景的实现可以点这里前面我们用大白话讲过什么是钩子,这里在重复一下,就是在什么什么之前什么什么之后英文叫专业点叫生命周期,装逼点可以叫守卫中也存在钩子的概念分为三步记忆全局守卫路由独享守卫组件独享守卫全局守卫很好理解,全

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点推送当天的参考答案

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

点击加入答题

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101826.html

相关文章

  • JS每日一题:Webpack哪些常见的Plugin?他们是解决什么问题的

    摘要:期有哪些常见的他们是解决什么问题的定义音译过来就是插件在中插件目的在于解决无法实现的其他事插件是一个具有属性的对象。 20190327期 Webpack有哪些常见的Plugin?他们是解决什么问题的 定义: 音译过来就是插件, 在webpack中, 插件目的在于解决 loader 无法实现的其他事 webpack 插件是一个具有 apply 属性的 JavaScript 对象。appl...

    songze 评论0 收藏0
  • JS每日一题:Es6中新增的数据类型哪些使用场景

    摘要:问中新增的数据类型有哪些使用场景中新增一种原始数据类型最大的特点是唯一性,值通过函数生成在中对象的属性都是字符串,我们使用他人定义的对象,然后去新增自己的属性,这样容易起冲突覆盖原有的属性也可以看成为一个字符串,不过这个字符能保证是独一无二 20190125问: Es6中新增的数据类型有哪些?使用场景? es6中新增一种原始数据类型Symbol,最大的特点是唯一性,Symbol值通过S...

    jsummer 评论0 收藏0
  • JS每日一题:Es6中新增的数据类型哪些使用场景

    摘要:问中新增的数据类型有哪些使用场景中新增一种原始数据类型最大的特点是唯一性,值通过函数生成在中对象的属性都是字符串,我们使用他人定义的对象,然后去新增自己的属性,这样容易起冲突覆盖原有的属性也可以看成为一个字符串,不过这个字符能保证是独一无二 20190125问: Es6中新增的数据类型有哪些?使用场景? es6中新增一种原始数据类型Symbol,最大的特点是唯一性,Symbol值通过S...

    DataPipeline 评论0 收藏0
  • JS每日一题: 前端的缓存哪些?都适用什么场景?区别是什么?

    摘要:问前端的缓存有哪些都适用什么场景区别是什么参考回答前端缓存分为两部分缓存浏览器缓存缓存强缓存强缓存主要是采用响应头中的和两个字段进行控制的值理解指定设置缓存最大的有效时间单位为指定响应会被缓存,并且在多用户间共享响应只作为私有的缓存, 20190116问: 前端的缓存有哪些?都适用什么场景?区别是什么? 参考回答 前端缓存分为两部分: http 缓存 浏览器缓存 http 缓存 强...

    MockingBird 评论0 收藏0
  • JS每日一题: 前端的缓存哪些?都适用什么场景?区别是什么?

    摘要:问前端的缓存有哪些都适用什么场景区别是什么参考回答前端缓存分为两部分缓存浏览器缓存缓存强缓存强缓存主要是采用响应头中的和两个字段进行控制的值理解指定设置缓存最大的有效时间单位为指定响应会被缓存,并且在多用户间共享响应只作为私有的缓存, 20190116问: 前端的缓存有哪些?都适用什么场景?区别是什么? 参考回答 前端缓存分为两部分: http 缓存 浏览器缓存 http 缓存 强...

    lolomaco 评论0 收藏0

发表评论

0条评论

张金宝

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<