在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 相关文章推荐
js操作ajax返回的json的注意问题!
Feb 23 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
Sep 05 Javascript
以Python代码实例展示kNN算法的实际运用
Oct 26 Javascript
解决JS无法调用Controller问题的方法
Dec 31 Javascript
JavaScript设计模式经典之工厂模式
Feb 24 Javascript
使用vue实现点击按钮滑出面板的实现代码
Jan 10 Javascript
js中setTimeout的妙用--防止循环超时
Mar 06 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
Jul 23 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
Aug 13 Javascript
详解jQuery如何实现模糊搜索
May 10 jQuery
vue路由守卫,限制前端页面访问权限的例子
Nov 11 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
May 01 Javascript
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
PHP has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
使用php验证复选框有效性的示例
2013/11/13 PHP
PHP引用(&)各种使用方法实例详解
2014/03/20 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
js变量以及其作用域详解
2020/07/18 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
关于Python中浮点数精度处理的技巧总结
2017/08/10 Python
python实时监控cpu小工具
2018/06/21 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
意大利运动服减价商店:ScontoSport
2020/03/10 全球购物
打架检讨书500字
2014/01/29 职场文书
开工仪式主持词
2014/03/20 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
让世界充满爱观后感
2015/06/10 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang