Vue中的路由钩子函数

本文详细介绍了Vue中三种类型的路由钩子:全局钩子、单个路由钩子和路由组件钩子的功能及用法。包括beforeEach和afterEach全局钩子的参数说明,单个路由的beforeEnter和beforeLeave钩子,以及组件内的beforeRouteEnter、beforeRouteUpdate和beforeRouteLeave钩子。

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

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

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

两种函数:

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

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

1.全局钩子函数

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

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()函数

 

2.单个路由的钩子函数

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

const router = new VueRouter({
  routes: [
    {
      path: '/login',
      component: Login,
      beforeEnter: (to, from, next) => {
        // ...
      },
      beforeLeave: (to, from, next) => {
        // ...
      }
    }
  ]
})

3.路由组件的钩子

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

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

var routes = [
    {
    path:'/home',
    component:home,
    name:"home"
    }
]

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

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

可以在路由组件内直接定义以下路由导航钩子

beforeRouteEnter

beforeRouteUpdate 

beforeRouteLeave

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

beforeRouteLeave(to, from, next) { //离开时
    next()
},
beforeRouteEnter(to, from, next) { //进入时
    next()
},
beforeRouteUpdate(to, from, next) {//更新时
    next()
},
data:{},
method: {}

 
Vue 是一种流行的 JavaScript 框架,用于构建单页面应用程序(SPA),在其中,路由允许在不同的 URL 之间进行导航,并在导航过程中执行特定的操作。Vue 提供了一些路由钩子函数,用于在路由导航期间执行额外的逻辑。以下是几种常见的路由钩子函数介绍: ### 全局路由钩子 可以在路由配置中直接定义 `beforeEach` 和 `afterEach` 守卫。`beforeEach` 用于在路由导航开始前执行额外逻辑,`afterEach` 则在路由导航完成后执行。 ```javascript const router = new VueRouter({ routes: [ // 路由配置 ] }) // 全局前置守卫 router.beforeEach((to, from, next) => { // 可以在这里进行身份验证、权限检查等操作 next() }) // 全局后置钩子 router.afterEach((to, from) => { // 例如可以记录页面访问日志 }) ``` ### 单个路由里面的钩子 `beforeEnter` 可以在单个路由配置中定义 `beforeEnter` 守卫,它在进入该路由时触发。 ```javascript const routes = [ { path: '/users/:id', component: UserDetails, beforeEnter: (to, from) => { // 可以在这里进行特定路由的前置处理,例如拒绝导航 return false }, } ] ``` ### 组件内的路由钩子 - **`beforeRouteEnter`**:在渲染该组件的对应路由被确认前调用,此时不能获取组件实例 `this`,因为钩子执行前,组件实例还没被创建。 - **`beforeRouteUpdate`**:在当前路由改变,但该组件被复用时调用。比如对于带有动态参数的路径 `/foo/:id`,在 `/foo/1` 和 `/foo/2` 之间跳转时,由于渲染同样的组件,组件实例会被复用,此钩子会在这种情况下被调用,并且可以访问组件实例 `this`。 - **`beforeRouteLeave`**:导航离开该组件的对应路由时调用,可以访问组件实例 `this`。 ```javascript const Foo = { template: `...`, beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `this` // 因为当钩子执行前,组件实例还没被创建 next() }, beforeRouteUpdate (to, from, next) { // 在当前路由改变,但是该组件被复用时调用 // 可以访问组件实例 `this` next() }, beforeRouteLeave (to, from, next) { // 导航离开该组件的对应路由时调用 // 可以访问组件实例 `this` next() } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值