使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能


Posted in Javascript onMarch 22, 2018

路由跳转前做一些验证,比如登录验证(未登录去登录页),是网站中的普遍需求。对此,vue-route 提供的 beforeRouteUpdate 可以方便地实现导航守卫(navigation-guards)。

导航守卫(navigation-guards)这个名字,听起来怪怪的,但既然官方文档是这样翻译的,就姑且这么叫吧。

贴上文档地址:https://router.vuejs.org/zh-cn/advanced/navigation-guards.html

先来摘抄一段文档中beforeRouteUpdate 的用法:

你可以使用 router.beforeEach 注册一个全局前置守卫:

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

当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫 resolve 完之前一直处于 等待中。

每个守卫方法接收三个参数:

to: Route: 即将要进入的目标 路由对象

from: Route: 当前导航正要离开的路由

next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

next(false): 中断当前的导航。如果浏览器的 URL 改变了(可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。

next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。

确保要调用 next 方法,否则钩子就不会被 resolved。

下面写一个例子,上一篇博客中我们的账户页,包括课程和订单,都需要在跳转前判断是不是已登录;已登录的情况再去登录页,跳转至首页:

const vueRouter = new Router({ 
  routes: [ 
    //...... 
    { 
     path: '/account', 
     name: 'account', 
     component: Account, 
     children: [ 
      {name: 'course', path: 'course', component: CourseList}, 
      {name: 'order', path: 'order', component: OrderList} 
     ] 
    } 
  ] 
}); 
vueRouter.beforeEach(function (to, from, next) { 
  const nextRoute = [ 'account', 'order', 'course']; 
  const auth = store.state.auth; 
  //跳转至上述3个页面 
  if (nextRoute.indexOf(to.name) >= 0) { 
    //未登录 
    if (!store.state.auth.IsLogin) { 
      vueRouter.push({name: 'login'}) 
    } 
  } 
  //已登录的情况再去登录页,跳转至首页 
  if (to.name === 'login') { 
    if (auth.IsLogin) { 
      vueRouter.push({name: 'home'}); 
    } 
  } 
  next(); 
});

总结

以上所述是小编给大家介绍的使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript 参考教程
Dec 29 Javascript
Knockoutjs快速入门(经典)
Dec 24 Javascript
Javascript表格翻页效果的具体实现
Oct 05 Javascript
js报$ is not a function 的问题的解决方法
Jan 20 Javascript
javascript 实现子父窗体互相传值的简单实例
Feb 17 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
Jul 23 Javascript
jQuery简单获取键盘事件的方法
Jan 22 Javascript
js获取元素的标签名实现方法
Oct 08 Javascript
jQuery生成假加载动画效果
Dec 01 Javascript
JS检测window.open打开的窗口是否关闭
Jun 25 Javascript
vue使用keep-alive保持滚动条位置的实现方法
Apr 09 Javascript
JavaScript如何获取一个元素的样式信息
Jul 29 Javascript
收集前端面试题之url、href、src
Mar 22 #Javascript
vue 的keep-alive缓存功能的实现
Mar 22 #Javascript
bootstrap中selectpicker下拉框使用方法实例
Mar 22 #Javascript
使用Vue开发动态刷新Echarts组件的教程详解
Mar 22 #Javascript
JavaScript分步实现一个出生日期的正则表达式
Mar 22 #Javascript
vuex 的简单使用
Mar 22 #Javascript
Vue.js中的computed工作原理
Mar 22 #Javascript
You might like
风格模板初级不完全修改教程
2006/10/09 PHP
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
表单元素事件 (Form Element Events)
2009/07/17 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
2016/05/12 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
总结js函数相关知识点
2018/02/27 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python入门篇之字典
2014/10/17 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
自荐信范文
2013/12/10 职场文书
幼儿园教师国培感言
2014/02/02 职场文书
音乐专业自荐信
2014/02/07 职场文书
腾讯广告词
2014/03/19 职场文书
学校评语大全
2014/05/06 职场文书
擅自离岗检讨书
2014/09/12 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
民政局办理协议离婚(范本)
2014/10/25 职场文书
解析Redis Cluster原理
2021/06/21 Redis