使用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 相关文章推荐
一段实时更新的时间代码
Jul 07 Javascript
jqgrid 编辑添加功能详细解析
Nov 08 Javascript
jQuery显示和隐藏 常用的状态判断方法
Jan 29 Javascript
jQuery简单实现日历的方法
May 04 Javascript
JS与jQ读取xml文件的方法
Dec 08 Javascript
js控件Kindeditor实现图片自动上传功能
Jul 20 Javascript
js生成随机数(指定范围)的实例代码
Jul 10 Javascript
JS 拼凑字符串的简单实例
Sep 02 Javascript
canvas实现动态小球重叠效果
Feb 06 Javascript
svg动画之动态描边效果
Feb 22 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
Nov 14 Javascript
Javascript Web Worker使用过程解析
Mar 16 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
javascript 随机展示头像实现代码
2011/12/06 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
微信小程序学习之数据处理详解
2017/07/05 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
javascript实现倒计时提示框
2021/03/02 Javascript
Python实现购物系统(示例讲解)
2017/09/13 Python
浅谈python输出列表元素的所有排列形式
2020/02/26 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
python中pyplot基础图标函数整理
2020/11/10 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
企划经理的岗位职责
2013/11/17 职场文书
高中生评语大全
2014/04/25 职场文书
高中课程设置方案
2014/05/28 职场文书
委托书的写法
2014/08/30 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python