Vue:router的beforeEach与afterEach钩子函数

Posted qdwz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue:router的beforeEach与afterEach钩子函数相关的知识,希望对你有一定的参考价值。

在路由跳转的时候,我们需要一些权限判断或者其他操作。这个时候就需要使用路由的钩子函数。

定义:路由钩子主要是给使用者在路由发生变化时进行一些特殊的处理而定义的函数。

总体来讲vue里面提供了三大类钩子,两种函数
1、全局钩子
2、某个路由的钩子
3、组件内钩子

两种函数:

1、Vue.beforeEach(function(to,form,next)) /*在跳转之前执行*/

2.Vue.afterEach(function(to,form))/*在跳转之后判断*/

全局钩子函数

顾名思义,它是对全局有效的一个函数

1
2
3
4
5
6
router.beforeEach((to, from, next) =>
    let token = router.app.$storage.fetch("token");
    let needAuth = to.matched.some(item => item.meta.login);
    if(!token && needAuth) return next(path: "/login");
    next();
);

beforeEach函数有三个参数:

  • to:router即将进入的路由对象
  • from:当前导航即将离开的路由
  • next:Function,进行管道中的一个钩子,如果执行完了,则导航的状态就是 confirmed (确认的);否则为false,终止导航。

afterEach函数不用传next()函数

某个路由的钩子函数

顾名思义,它是写在某个路由里头的函数,本质上跟组件内函数没有区别。

技术图片
const router = new VueRouter(
  routes: [
    
      path: ‘/login‘,
      component: Login,
      beforeEnter: (to, from, next) => 
        // ...
      ,
      beforeLeave: (to, from, next) => 
        // ...
      
    
  ]
)
技术图片

路由组件的钩子

注意:这里说的是路由组件!

路由组件 属于 组件,但组件 不等同于 路由组件!所谓的路由组件:直接定义在router中component处的组件。如:

技术图片
var routes = [
    
    path:‘/home‘,
    component:home,
    name:"home"
    
]
技术图片

在子组件中调用路由的钩子函数时无效的。

在官方文档上是这样定义的:

可以在路由组件内直接定义以下路由导航钩子
beforeRouteEnter
beforeRouteUpdate (2.2 新增)
beforeRouteLeave

这里简单说下钩子函数的用法:它是和data,methods平级的。

技术图片
beforeRouteLeave(to, from, next) 
    next()
,
beforeRouteEnter(to, from, next) 
    next()
,
beforeRouteUpdate(to, from, next) 
    next()
,
data:,
method: 

以上是关于Vue:router的beforeEach与afterEach钩子函数的主要内容,如果未能解决你的问题,请参考以下文章

vue - router

Vue Router 进阶笔记

Vue Router 详解

《vue》router.push,params不生效问题

vue,js vue-router 2 组件数据不更新

Vue Router 路由守卫:完整的导航解析流程