使用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 相关文章推荐
Mootools 1.2教程(21)——类(二)
Sep 15 Javascript
js判断是否为ie的方法小结
Jan 13 Javascript
浅析JS中document对象的一些重要属性
Mar 06 Javascript
javascript比较两个日期的先后示例代码
Dec 31 Javascript
js一维数组、多维数组和对象的混合使用方法
Apr 03 Javascript
jQuery实现的可编辑表格完整实例
Jun 20 Javascript
jQuery实现鼠标滑过图片移动特效
Dec 08 Javascript
解析Vue.js中的组件
Feb 02 Javascript
JavaScript中常用的简洁高级技巧总结
Mar 10 Javascript
小程序click-scroll组件设计
Jun 18 Javascript
WEEX环境搭建与入门详解
Oct 16 Javascript
Node.js path模块,获取文件后缀名操作
Nov 07 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中的观察者模式简单实例
2015/01/20 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
动态加载script文件的两种方法
2013/08/15 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
js实现查询商品案例
2020/07/22 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
vuex的使用步骤
2021/01/06 Vue.js
python处理cookie详解
2014/02/07 Python
详解python的几种标准输出重定向方式
2016/08/15 Python
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
py-charm延长试用期限实例
2019/12/22 Python
Python sorted排序方法如何实现
2020/03/31 Python
django正续或者倒序查库实例
2020/05/19 Python
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
宿舍打麻将检讨书
2014/01/24 职场文书
政协调研汇报材料
2014/08/15 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书
聘任书的格式及模板
2019/10/28 职场文书
小学三年级作文之写景
2019/11/05 职场文书
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python
Python 发送SMTP邮件的简单教程
2021/06/24 Python
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
Win11开始菜单添加休眠选项
2022/04/19 数码科技