我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于Vue中的全局导航守卫(beforeEach、afterEach)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

关于Vue中的全局导航守卫(beforeEach、afterEach)

全局导航守卫(beforeEach、afterEach)

在项目开发中每一次路由的切换或者页面的刷新都需要判断用户是否已经登录,前端可以判断,后端也会进行判断的,我们前端最好也进行判断。

vue-router 提供了导航钩子:全局前置导航钩子 beforeEach 和全局后置导航钩子 afterEach,他们会在路由即将改变前和改变后进行触发。所以判断用户是否登录需要在 beforeEach 导航钩子中进行判断。

导航钩子有3个参数

1、to:即将要进入的目标路由对象;

2、from:当前导航即将要离开的路由对象;

3、next :调用该方法后,才能进入下一个钩子函数(afterEach)。

next()//直接进to 所指路由
next(false) //中断当前路由
next('route') //跳转指定路由
next('error') //跳转错误路由

beforeEach

实现用户验证的代码:

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 用的少

router.afterEach((to,from)=>{ //这里不接收next
    console.log(to);
    console.log(from);
})

全局导航守卫是干什么的?

应用场景: 登录页面防止用户页面直接在地址栏中可以访问其他页面;

背景: 在 地址栏当中输入地址可以访问其他页面;然而我们需要一个系统当中来进行拦截;

那就是全局导航守卫来进行拦截, 用vue-Router 实例的方法来实现的;

1.在router中的index.js文件里引入vue-router

import Router from 'vue-router'
Vue.use(Router)

2.创建路由实例

const router = new Router({
  routes: [
    { path: '/', redirect: '/login' },
    { path: '/login', component: Login },
    { path: '/home', component: Home}
  ]
})

3.挂载全局导航守卫

//全局路由前置守卫 --路由拦截
router.beforeEach((to, from, next) => {
  // to  将要前往的路由
  //from 从哪个路由过来的
  //next(path) 是一个函数  表示继续执行下一步,强制执行前往的path 路由
 
  //如果前往login 页面  则不需要token 直接进入就可以
  if (to.path === "/login") return next();
 
  //获取token
  const TOKEN = window.sessionStorage.getItem("TOKEN");
  if (!TOKEN) {
    //token 不存在  name 意味着 没有进行登录  返回登录页面
    next({ path: "/login" });
  }
  //已经 存在TOKEN  name 就可以进行
  next();
});

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

关于Vue中的全局导航守卫(beforeEach、afterEach)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue中的路由导航守卫导航解析流程

这篇文章主要介绍了Vue中的路由导航守卫导航解析流程,正如其名,vue-router提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入路由导航中:全局的,单个路由独享的,或者组件级的
2023-05-16

vue中的导航守卫使用及说明

这篇文章主要介绍了vue中的导航守卫使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-28

Vue中的全局守卫怎么配置

这篇文章主要介绍了Vue中的全局守卫怎么配置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue中的全局守卫怎么配置文章都会有所收获,下面我们一起来看看吧。全局守卫在main.js中进行配置:import Vu
2023-07-05

一文聊聊Vue中的全局守卫

Vue中怎么进行全局守卫?下面本篇文章带大家聊聊Vue中的全局守卫,希望对大家有所帮助!
2023-05-14

Vue项目中关于全局css的处理

我们在写CSS的时候,会遇到大量相同的属性(比如:margin-top:10px)这种属性几乎每个vue页面都有。这个时候,我们可以把css挂载到全局上,供所有vue页面使用,同时也方便修改。感兴趣的同学可以参考一下
2023-05-16

编程热搜

目录