详解Vue钩子函数(1)

290 阅读1分钟

Vue-Router导航守卫

在很多时候,我们做的项目中,需要通过路由进行一系列的操作,最常见的就是登录权限验证,荡1用户满足条件时,才可以进入对应的导航,否则就会取消跳转,并跳到登录页面,提示登录。

在做路由的过程中,方法有很多种,有全局的,单个路由独享的,或者组件级的。

全局守卫

Vue-router全局有三个守卫:

  1. router.beforeEach:全局前置守卫 进入路由之前
  2. router.beforeResolve:全局解析守卫(2.5.0+)在beforeRouteEach调用之后调用
  3. router.afterEach全局后置钩子 进入路由之后

使用方法 :

在router下面的index.js中

a.png

to,from,next这三个参数

to和from是将要进入和将要离开的路由对象,路由对象指的是平时通过this.$route获取到的路由对象。

  • next:Function 这个参数是个函数,且必须调用,否则不能进入路由
  • next()进入该路由。
  • next(false):取消进入路由,url地址重置为from路由地址(也就是将要离开的路由地址)。
  • next跳转新路由,当前的导航呗终端,重新开始一个新的导航。

路由独享守卫

给某些路由单独配置守卫

b.png

全局后置钩子的跳转

router.afterEach不接受next函数,所以不会改变导航本身,只能当成一个钩子来使用,可以使用router.push()来跳转

完整的路由导航

  • 触发进入其他路由。
  • 调用前置守卫: beforeEach
  • 调用路由独享守卫: beforeEnter
  • 导航被确认。
  • 调用全局后置钩子的afterEach钩子。