使用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 相关文章推荐
自己的js工具_Form 封装
Aug 21 Javascript
顶部缓冲下拉菜单导航特效的JS代码
Aug 27 Javascript
js如何判断用户是在PC端和还是移动端访问
Apr 24 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
js/jquery判断浏览器类型的方法小结
May 12 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
Dec 02 Javascript
JS动态创建元素的两种方法
Apr 20 Javascript
什么是JavaScript注入攻击?
Sep 14 Javascript
vue component组件使用方法详解
Jul 14 Javascript
微信小程序实现验证码获取倒计时效果
Feb 08 Javascript
微信小程序中使用wxss加载图片并实现动画效果
Aug 13 Javascript
Node.js使用supervisor进行开发中调试的方法
Mar 26 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
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
js Math 对象的方法
2013/09/01 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
简单实现js浮动框
2016/12/13 Javascript
js闭包用法实例详解
2016/12/13 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
详解vue axios二次封装
2018/07/22 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
pymongo中聚合查询的使用方法
2019/03/22 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
意大利男装网店:Vrients
2019/05/02 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
汽车促销活动方案
2014/03/31 职场文书
校企合作协议书
2014/04/16 职场文书
安全生产培训心得体会
2016/01/18 职场文书
Nest.js参数校验和自定义返回数据格式详解
2021/03/29 Javascript
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python
vue3不同环境下实现配置代理
2022/05/25 Vue.js