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: {}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 中,beforeEach 是一种全局路由钩子函数,它会在路由切换之前被执行。它可用于进行用户身份验证、路由权限控制等。 beforeEach 钩子函数接收三个参数:to、from 和 next。 - to:即将要进入的目标路由对象。 - from:当前导航正要离开的路由。 - next:必须调用该函数来 resolve 这个钩子。next() 表示继续前进,next(false) 表示中断当前导航,next('/') 或 next({ path: '/' }) 表示跳转到一个不同的地址。 在 beforeEach 中,可以根据 to 和 from 的不同属性进行路由控制。例如,可以根据用户是否登录来控制路由跳转。如果用户未登录,则跳转到登录页面;如果已登录,则继续前进。 下面是一个简单的示例: ``` router.beforeEach((to, from, next) => { const isLogin = localStorage.getItem('token') // 假设已登录 if (to.meta.requireAuth) { // 判断该路由是否需要登录权限 if (isLogin) { // 判断是否已经登录 next() // 已登录,继续前进 } else { next({ // 未登录,跳转到登录页面 path: '/login', query: { redirect: to.fullPath } // 将跳转的路由 path 作为参数,登录成功后跳转到该路由 }) } } else { next() // 不需要登录权限,继续前进 } }) ``` 在上面的示例中,我们通过判断 to.meta.requireAuth 属性来确定该路由是否需要登录权限。如果需要,则从 localStorage 中获取 token 信息,判断用户是否已登录。如果已登录,则调用 next() 继续前进;如果未登录,则调用 next() 跳转到登录页面,并将当前路由作为参数传递给登录页面,以便登录成功后跳转到该路由。如果该路由不需要登录权限,则直接调用 next() 继续前进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值