在vue中利用全局路由钩子给url统一添加公共参数的例子


Posted in Javascript onNovember 01, 2019

有的时候我们可能有这样的需求,比如现在url为m.taoyuewenhua.com/#/ 我们需要在用户每次跳转路由的时候监控有没有abc这个参数. 如果有,后端要求我们在以后跳转任何url的时候,都要在url携带上这个参数.就变成m.taoyuewenhua.com/#/&abc=xxx;

这个参数称为"公共参数";

那么,我们该如何做呢?因为vue中有很多组件.在每个组件都写的话,太麻烦.所以这个时候,全局路由钩子登场了.分别是

router.beforeEach 全局导航前置守卫 路由跳转前执行

router.beforeResolve 全局导航解析守卫 vue2.5新增 导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后, 解析守卫就被调用

router.afterEach 全局导航后置守卫 路由跳转后执行

我们此次用到的是前置守卫.开始我用的是后置守卫.因为出现bug,也可能是本人技术不精.后又改为前置守卫.

代码如下:

router.beforeEach((to, from, next) => {
 if (to.query.abc) {
  next();
  return;
 };
 if (from.query.abc) {
  let toQuery = JSON.parse(JSON.stringify(to.query));
  toQuery.abc = from.query.abc;
  next({
   path: to.path,
   query: toQuery
  })
 } else {
  next()
 }
 
 });

在这里解释一下: 前置守卫一定记得执行next方法.如果不执行,路由不会跳转.路由在跳转的时候,如果我们输出from和to.他们分别代表上一个路由和现在的路由.假如我们要从a调到b;也就是跳转的时候,我们马上获取b路由地址.并且判断此时b路由有没有abc这个参数.如果有就直接跳转过去,next方法执行.并且return;如果没有,然后如果a这个url有abc这个参数了,那么我们就把这个参数放到b的url上;并且next方法执行.携带上这个参数就行了. 最后,如果a没有这个参数 ,直接next方法执行.也就是说路由直接跳转过去,不做任何拦截。

还有一点需要提醒初学者.初学者刚用路由钩子容易遇到死循环.建议好好看一下路由钩子的执行机制.就不会遇到死循环了.有时间了说一下这个问题.

以上这篇在vue中利用全局路由钩子给url统一添加公共参数的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript之学会吝啬 精简代码
Apr 25 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
Oct 11 Javascript
Javascript拓展String方法小结
Jul 08 Javascript
可简单避免的三个JS发布错误的详细介绍
Aug 02 Javascript
jQuery弹出层插件Lightbox_me使用指南
Apr 21 Javascript
javascript简单实现滑动菜单效果的方法
Jul 27 Javascript
JavaScript原生节点操作小结
Jan 17 Javascript
小程序分页实践之编写可复用分页组件
Jul 18 Javascript
微信小程序webview 脚手架使用详解
Jul 22 Javascript
微信小程序背景音乐开发详解
Dec 12 Javascript
JS通用方法触发点击事件代码实例
Feb 17 Javascript
vue中利用three.js实现全景图的完整示例
Dec 07 Vue.js
js实现旋转的星空效果
Nov 01 #Javascript
浅谈小程序globalData的那些事儿
Nov 01 #Javascript
小程序怎样让wx.navigateBack更好用的方法实现
Nov 01 #Javascript
vue实现配置全局访问路径头(axios)
Nov 01 #Javascript
vue.js路由mode配置之去掉url上默认的#方法
Nov 01 #Javascript
js实现漂亮的星空背景
Nov 01 #Javascript
Vue实现push数组并删除的例子
Nov 01 #Javascript
You might like
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
qTip2 精致的基于jQuery提示信息插件
2012/02/17 Javascript
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
Python psutil模块简单使用实例
2015/04/28 Python
浅谈python多线程和队列管理shell程序
2015/08/04 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
Keras—embedding嵌入层的用法详解
2020/06/10 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
HTML5新增的8类INPUT输入类型介绍
2015/07/06 HTML / CSS
构造方法和其他方法的区别
2016/04/26 面试题
生产车间实习自我鉴定
2013/09/23 职场文书
公务员个人自我评价分享
2013/11/06 职场文书
特色冷饮店创业计划书
2014/01/28 职场文书
社区助残日活动总结
2014/08/29 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
停电放假通知
2015/04/14 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
PyTorch的Debug指南
2021/05/07 Python