使用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插件制作 学习过程及实例
Apr 25 Javascript
JavaScript学习笔记记录我的旅程
May 23 Javascript
html文本框提示效果的示例代码
Jun 28 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
Feb 03 Javascript
详解javascript的变量与标识符
Jan 04 Javascript
Extjs4.0 ComboBox如何实现三级联动
May 11 Javascript
使用Bootstrap美化按钮实例代码(demo)
Feb 03 Javascript
详解AngularJS ui-sref的简单使用
Apr 24 Javascript
Vue-Router模式和钩子的用法
Feb 28 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
Apr 22 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
May 31 Javascript
ES6 如何改变JS内置行为的代理与反射
Feb 11 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
php字符串操作常见问题小结
2016/10/11 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
使用js获取QueryString的方法小结
2010/02/28 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
在keras中实现查看其训练loss值
2020/06/16 Python
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
电大自我鉴定
2013/10/27 职场文书
招聘单位介绍信
2014/01/14 职场文书
参观考察邀请函范文
2014/01/29 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
python实现过滤敏感词
2021/05/08 Python