vue路由的钩子函数

Vue Router 提供了丰富的钩子函数,这些钩子函数允许我们在路由发生变化时执行某些操作。下面我将列举并详细解释这些钩子函数,并给出示例代码。

  1. 全局守卫

全局守卫是定义在路由配置文件上的守卫,它们会在路由发生变化时按照创建顺序调用。

  • beforeEach:全局前置守卫,进入路由之前调用。
  • beforeResolve:在路由得到最终确认之前调用(在 beforeEach 和组件内守卫之后,afterEach 守卫之前)。
  • afterEach:全局后置钩子,进入路由之后调用。
 
const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
// ...
next()
})

router.beforeResolve((to, from, next) => {
// ...
next()
})

router.afterEach((to, from) => {
// ...
})

2、路由独享的守卫

你可以在路由配置中直接定义 beforeEnter 守卫:

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

3、组件内的守卫

  • beforeRouteEnter:组件被渲染之前调用,此时组件实例还未创建,不能访问 this
  • beforeRouteUpdate:路由改变,但是该组件被复用时调用。
  • beforeRouteLeave:导航离开该组件的对应路由时调用。

在组件内部定义守卫时,需要使用 beforeRouteEnterbeforeRouteUpdate 和 beforeRouteLeave 生命周期钩子:

 
<template>
<!-- 组件模板 -->
</template>

<script>
export default {
beforeRouteEnter(to, from, next) {
// 在渲染该组件的对应路由被 confirm 前调用
// 不!能!获取组件实例 `this`
// 因为当守卫执行前,组件实例还没被创建
},
beforeRouteUpdate(to, from, next) {
// 在当前路由改变,但是该组件被复用时调用
// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
// 因为在组件被复用的情况下,组件的生命周期钩子不会被调用,因此你需要这个钩子来对这个情况进行处理。
},
beforeRouteLeave(to, from, next) {
// 导航离开该组件的对应路由时调用
// 可以访问组件实例 `this`
}
}
</script>

在这些钩子函数中,to 和 from 是路由对象,分别表示目标路由和当前路由。next 是一个函数,必须调用该方法来 resolve 这个钩子。如果不调用 next,则整个导航都会停滞。

这些钩子函数为我们提供了强大的路由控制能力,可以根据需求进行灵活使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值