使用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 相关文章推荐
jquery动态加载图片数据练习代码
Aug 04 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
Apr 02 Javascript
jquery ready函数、css函数及text()使用示例
Sep 27 Javascript
百度地图自定义控件分享
Mar 04 Javascript
jquery ajax 如何向jsp提交表单数据
Aug 23 Javascript
第九章之路径分页标签与徽章组件
Apr 25 Javascript
JavaScript仿flash遮罩动画效果
Jun 15 Javascript
jQuery插件zTree实现删除树子节点的方法示例
Mar 08 Javascript
vue+swiper实现侧滑菜单效果
Dec 28 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
Jul 27 Javascript
详解Vue2.5+迁移至Typescript指南
Aug 01 Javascript
js中的面向对象之对象常见创建方法详解
Dec 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
PHP中Session可能会引起并发问题
2015/06/26 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
nodejs使用socket5进行代理请求的实现
2020/02/21 NodeJs
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
Python找出9个连续的空闲端口
2016/02/01 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
python 删除指定时间间隔之前的文件实例
2018/04/24 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
法国时尚童装网站:Melijoe
2016/08/10 全球购物
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
高中军训广播稿
2014/01/14 职场文书
志愿者活动总结
2014/04/28 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
数据库之SQL技巧整理案例
2021/07/07 SQL Server
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL
Java Spring读取和存储详细操作
2022/08/05 Java/Android