vue router导航守卫(router.beforeEach())的使用详解


Posted in Javascript onApril 19, 2019

导航守卫

        导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。(记住参数或查询的改变并不会触发进入/离开的导航守卫。你可以通过观察$route对象来应对这些变化,或使用beforeRouteUpdate的组件内守卫。)

好久没写一些东西了,总是感觉有啥缺少的。~~~~恰好碰到最近在写一个移动端项目,遇到了如何使同一个链接在不同条件下跳转到不同路由组件问题,譬如大家经常看到手机中没登录跳转登录页,登陆后跳转个人信息页等。废话不多说了,直接上图:

vue router导航守卫(router.beforeEach())的使用详解

这是没登录状态,点击下面mine按钮跳转至登录页

vue router导航守卫(router.beforeEach())的使用详解

这个是我登录了自己的账号后,再次点击mine按钮会跳转至个人信息页面

好了,看到了这个效果今天咱们来实现下

实现方法

我们点击下面mine按钮其实是路由跳转,所以我们需要在跳转路由之前做一个判断,根据不同的条件让这个链接跳转到不同路由。这时候我们vue-router中的导航守卫就闪亮登场了~~~

先看官方文档: https://router.vuejs.org/zh-cn/advanced/navigation-guards.html

vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。

官方文档中说了很清楚,我们可以使用 router.beforeEach 注册一个全局前置守卫:

在router文件夹下index.js中添加以下代码

router.beforeEach((to, from, next) => {
 // ...
})

vue router导航守卫(router.beforeEach())的使用详解

这里对router.beforeEach方法的每个参数做简要的解释。

“to”: 即将要进入的目标 路由对象;(这个对象中包含name,params,meta等属性)

"from": 当前导航正要离开的路由对象;(这个对象中包含name,params,meta等属性)

“next”: Function: 确保要调用 next 方法,否则钩子就不会被 resolved。这个当中还可以传一些参数,具体可以看官方文档。

我们在代码中做了一个判断 if (to.name === 'Mine') ,也就是说当我们要跳转的路由对象是Mine时候,才会进入导航守卫中判断条件,当我们点击其他链接跳转其他页正常,因为我们只有mine按钮链接对应的情况有两种。

// 登陆/注册就去用户详情页
 if (localStorage.getItem('userID')) {
  router.replace('/myinfo')
 }

这段代码就是判断当用户点击了mine,我们需要判断用户是否是登录还是未登录了。因为之前用户登录的时候我将用户的userID保存到了localStorage中,所以只需要判断localStorage中是否有用户的userID,来判断用户是否登录。这里情况两个,未登录去登录页,登录去个人信息页

好了,通过简单的配置使用,我们就可以愉快的根据不同的情况来实现路由跳转不同组件了~

哈哈,很简单吧,欢迎大家一起交流学习前端知识。我在GitHub上等你一起呦
~

说明

文章因为是在工作之余写的,可能时间匆忙,有些错别字或者语法等低级错误,欢迎留言指出,谢谢。。

同时在GitHub上也可以一起交流交流~~~

GitHub 走你

总结

以上所述是小编给大家介绍的vue router导航守卫(router.beforeEach())的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
DHTML 中的绝对定位
Nov 26 Javascript
用javascript替换URL中的参数值示例代码
Jan 27 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
Feb 12 Javascript
使用js画图之正弦曲线
Jan 12 Javascript
JavaScript关于提高网站性能的几点建议(一)
Jul 24 Javascript
bootstrap table配置参数例子
Jan 05 Javascript
js 获取图像缩放后的实际宽高,位置等信息
Mar 07 Javascript
Vue.js基础学习之class与样式绑定
Mar 20 Javascript
如何在AngularJs中调用第三方插件库
May 21 Javascript
Angular2使用jQuery的方法教程
May 28 jQuery
解决vue-cli webpack打包后加载资源的路径问题
Sep 25 Javascript
React如何使用axios请求数据并把数据渲染到组件
Aug 05 Javascript
this.$toast() 了解一下?
Apr 18 #Javascript
Vue-input框checkbox强制刷新问题
Apr 18 #Javascript
vue axios封装及API统一管理的方法
Apr 18 #Javascript
Vue组件系列开发之模态框
Apr 18 #Javascript
详解vue的数据劫持以及操作数组的坑
Apr 18 #Javascript
微信小程序 setData 对 data数据影响问题
Apr 18 #Javascript
详解JavaScript中关于this指向的4种情况
Apr 18 #Javascript
You might like
PHP4实际应用经验篇(2)
2006/10/09 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
分页栏的web标准实现
2011/11/01 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
2015/11/09 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
js精确的加减乘除实例
2017/11/14 Javascript
面包屑导航详解
2017/12/07 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
详解javascript void(0)
2020/07/13 Javascript
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
基于并发服务器几种实现方法(总结)
2017/12/29 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
家居设计专业个人自荐信范文
2013/11/26 职场文书
全国文明单位申报材料
2014/05/31 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
婚前协议书范本
2014/10/27 职场文书
2014年终个人工作总结
2014/11/07 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
圆明园观后感
2015/06/03 职场文书
css 边框添加四个角的实现代码
2021/10/16 HTML / CSS
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android