vue路由守卫 beforeEach、钩子

目录

1.全局钩子

2.某个路由独享钩子 

3.组件路由 

4.触发钩子的顺序


1.全局钩子

主要包括beforeEach和aftrEach,

beforeEach函数有三个参数:
to:router即将进入的路由对象
from:当前导航即将离开的路由
next:Function,进行管道中的一个钩子,如果执行完了,则导航的状态就是 confirmed (确认的);否则为false,终止导航。
    afterEach函数不用传next()函数
这类钩子主要作用于全局,一般用来判断权限,以及以及页面丢失时候需要执行的操作,例如就像上面的

router.beforeEach((to, from, next) => {
  console.log(store.state.token);
  // to: Route: 即将要进入的目标 路由对象
  // from: Route: 当前导航正要离开的路由
  // next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
  const route = ["index", "list"];
  let isLogin = store.state.token; // 是否登录
  // 未登录状态;当路由到route指定页时,跳转至login
  if (route.indexOf(to.name) >= 0) {
    if (isLogin == null) {
      router.push({ path: "/login" });
    }
  }
  // 已登录状态;当路由到login时,跳转至home
  console.log(to.name);
  localStorage.setItem("routerName", to.name);
  if (to.name === "login") {
    if (isLogin != null) {
      router.push({ path: "/HomeMain" });
    }
  }
  next();
});


2.某个路由独享钩子 


某个路由单独使用的,本质上和后面的组件内钩子是一样的。都是特指的某个路由。不同的是,这里的一般定义在router当中,而不是在组件内。如下

{
  path: '/dashboard',
  component: resolve => require(['../components/page/Dashboard.vue'], resolve),
  meta: { title: '系统首页' },
  beforeEnter: (to, from, next) => {

  },
  beforeLeave: (to, from, next) => {

  }
}


3.组件路由 

主要包括 beforeRouteEnter和beforeRouteUpdate ,beforeRouteLeave,这几个钩子都是写在组件里面也可以传三个参数(to,from,next),作用与前面类似.

beforeRouteLeave(to, from, next) {
  // ....
  next()
},
beforeRouteEnter(to, from, next) {
  // ....
  next(vm => {
    //因为当钩子执行前,组件实例还没被创建
    // vm 就是当前组件的实例相当于上面的 this,所以在 next 方法里你就可以把 vm 当 this 来用了。
    console.log(vm);//当前组件的实例
  });
},
beforeRouteUpdate(to, from, next) {
  // ....
  next()
},
computed: { },
method: { }


官网介绍

to: Route:              //即将要进入的目标 路由对象
from: Route:          //当前导航正要离开的路由
next: Function:       //一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
next():                  //进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。
next(false):           //中断当前的导航。如果浏览器的 URL 改变了(可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。
next(‘/’)               //或者 next({ path: ‘/’ }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。

4.触发钩子的顺序


将路由导航、keep-alive、和组件生命周期钩子结合起来的,触发顺序,假设是从a组件离开,第一次进入b组件:

beforeRouteLeave:路由组件的组件离开路由前钩子,可取消路由离开。
beforeEach: 路由全局前置守卫,可用于登录验证、全局路由loading等。
beforeEnter: 路由独享守卫
beforeRouteEnter: 路由组件的组件进入路由前钩子。
beforeResolve:  路由全局解析守卫
afterEach:路由全局后置钩子
beforeCreate:组件生命周期,不能访问this。
created:组件生命周期,可以访问this,不能访问dom。
beforeMount:组件生命周期
deactivated: 离开缓存组件a,或者触发a的beforeDestroy和destroyed组件销毁钩子。
mounted:访问/操作dom。
activated:进入缓存组件,进入a的嵌套子组件(如果有的话)。
执行beforeRouteEnter回调函数next。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue路由守卫是一种用于控制页面访问权限的机制,它可以拦截路由请求并根据一定的规则进行处理或重定向。Vue路由守卫提供了一些钩子函数,可以在路由跳转的不同阶段进行处理,以实现不同的功能。 常用的Vue路由守卫钩子函数包括: - beforeEach:在路由跳转之前被调用,可以用于进行路由权限校验、记录用户访问记录等操作。 - afterEach:在路由跳转之后被调用,可以用于进行页面滚动、页面统计等操作。 - beforeRouteEnter:在路由进入之前被调用,可以用于在路由进入之前进行数据加载等操作。 - beforeRouteUpdate:在路由更新之前被调用,可以用于在路由更新之前进行数据加载等操作。 - beforeRouteLeave:在离开当前路由之前被调用,可以用于进行用户操作确认、数据保存等操作。 在使用Vue路由守卫时,需要在路由配置中进行注册。例如: ``` const router = new VueRouter({ routes: [ { path: '/home', component: Home, meta: { requiresAuth: true } }, { path: '/login', component: Login } ] }) router.beforeEach((to, from, next) => { const requiresAuth = to.matched.some(record => record.meta.requiresAuth) const isAuthenticated = auth.isAuthenticated() if (requiresAuth && !isAuthenticated) { next('/login') } else { next() } }) ``` 在上面的例子中,我们使用了beforeEach钩子函数来实现路由权限校验。通过判断路由的meta信息中是否需要权限校验,以及用户是否已经登录,来决定是否跳转到登录页面。如果需要跳转到登录页面,则调用next('/login')方法,否则调用next()方法来继续路由跳转。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天高任鸟飞dyz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值