前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5分钟学会vue中的路由守卫

5分钟学会vue中的路由守卫

作者头像
我不是费圆
发布2020-09-22 10:12:58
8590
发布2020-09-22 10:12:58
举报
文章被收录于专栏:鲸鱼动画

5分钟学会vue中的路由守卫

在项目开发中每一次路由的切换或者页面的刷新都需要判断用户是否已经登录,前端可以判断,后端也会进行判断的,我们前端最好也进行判断。 vue-router提供了导航钩子:全局前置导航钩子 beforeEach和全局后置导航钩子 afterEach,他们会在路由即将改变前和改变后进行触发。所以判断用户是否登录需要在beforeEach导航钩子中进行判断。 导航钩子有3个参数: 1、to:即将要进入的目标路由对象; 2、from:当前导航即将要离开的路由对象; 3、next :调用该方法后,才能进入下一个钩子函数(afterEach)。   next()//直接进to 所指路由   next(false) //中断当前路由   next(‘route’) //跳转指定路由   next(‘error’) //跳转错误路由 beforeEach: 路由配置文件:

代码语言:javascript
复制
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import HomePage from '@/pages/home.vue'
Vue.use(Router)
const router=new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
     {
      path: '/home',
      name: 'home',
      component: HomePage
    },
     {
        path:'*',
        redirect:'/home'
     }
  ],
})
  router.beforeEach((to,from,next)=>{
    console.log(to);
    console.log(from);
    next();
  })
 export default router;

打印结果如下:

实现用户验证的代码:

代码语言:javascript
复制
router.beforeEach((to, from, next) => {
    //我在这里模仿了一个获取用户信息的方法
  let isLogin = window.sessionStorage.getItem('userInfo');
    if (isLogin) {
        //如果用户信息存在则往下执行。
        next()
    } else {
        //如果用户token不存在则跳转到login页面
        if (to.path === '/login') {
            next()
        } else {
            next('/login')
        }
    }
})

afterEach: 和beforeEach不同的是afterEach不接收第三个参数 next 函数,也不会改变导航本身,一般beforeEach用的最多,afterEach用的少.

代码语言:javascript
复制
router.afterEach((to,from)=>{ //这里不接收next
    console.log(to);
    console.log(from);
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5分钟学会vue中的路由守卫
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档