使用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设置function参数默认值(适合没有传参情况)
Feb 24 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
Apr 08 Javascript
javascript实现切换td中的值
Dec 05 Javascript
javascript实现随时变化着的背景颜色
Apr 02 Javascript
js获取数组的最后一个元素
Apr 14 Javascript
浅谈JavaScript字符串与数组
Jun 03 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
May 05 Javascript
bootstrap laydate日期组件使用详解
Jan 04 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
Aug 09 Javascript
jQuery/JS监听input输入框值变化实例
Oct 17 jQuery
Vue记住滚动条和实现下拉加载的完美方法
Jul 31 Javascript
js实现微信聊天界面
Aug 09 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/04/26 PHP
php获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
原生JS实现无缝轮播图片
2020/06/24 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
tensorflow识别自己手写数字
2018/03/14 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
HTML5 FileReader对象的具体使用方法
2020/05/22 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
医学生职业规划范文
2014/01/05 职场文书
大一军训感言
2014/01/09 职场文书
签约仪式主持词
2014/03/19 职场文书
同意报考公务员证明
2015/06/17 职场文书
治庸问责工作总结
2015/08/11 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers