使用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 AJAX实现目录浏览与编辑的代码
Oct 21 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
Nov 11 Javascript
IE8中使用javascript动态加载CSS的解决方法
Jun 17 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
Aug 13 Javascript
jQuery事件绑定用法详解
Sep 08 Javascript
HTML Table 空白单元格补全的简单实现
Oct 13 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
Jan 08 Javascript
微信小程序实现图片放大预览功能
Oct 22 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
Jul 02 Javascript
解决layer图标icon不加载的问题
Sep 04 Javascript
解决layui富文本编辑器图片上传无法回显的问题
Sep 18 Javascript
微信小程序自定义波浪组件使用方法详解
Sep 21 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学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
JS中的作用域链
2017/03/01 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
2020/03/03 Python
python实现手势识别的示例(入门)
2020/04/15 Python
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
简历里的自我评价
2014/01/31 职场文书
三八妇女节活动主持词
2014/03/17 职场文书
国旗下演讲稿
2014/05/08 职场文书
信息技术国培研修日志
2015/11/13 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
PHP控制循环操作的时间
2021/04/01 PHP