使用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 获取表单text,areatext,radio,checkbox,select值的代码
Nov 12 Javascript
javascript 面向对象全新理练之继承与多态
Dec 03 Javascript
一个css与js结合的下拉菜单支持主流浏览器
Oct 08 Javascript
JavaScript前端图片加载管理器imagepool使用详解
Dec 29 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
Mar 27 Javascript
jQuery实现二级下拉菜单效果
Jan 05 Javascript
AngularJS基础 ng-keyup 指令简单示例
Aug 02 Javascript
angular2倒计时组件使用详解
Jan 12 Javascript
weui框架实现上传、预览和删除图片功能代码
Aug 24 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
Jun 07 Javascript
深入浅析Vue中的Prop
Jun 10 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
Oct 23 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上传大文件设置方法
2016/04/14 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
php 猴子摘桃的算法
2017/06/20 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
javascript学习网址备忘
2007/05/29 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
javascript面向对象之二 命名空间
2011/02/08 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
Python中os和shutil模块实用方法集锦
2014/05/13 Python
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
技术总监个人的自我评价范文
2013/12/18 职场文书
采购主管岗位职责
2014/02/01 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
爱心倡议书范文
2014/05/12 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
法学专业毕业实习自我鉴定2014
2014/09/27 职场文书