在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是否可实现多线程  深入理解JavaScript定时机制
Dec 22 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
Apr 06 Javascript
Javascript基础_标记文字的实现方法
Jun 14 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Dec 15 Javascript
jQuery实现标签页效果实战(4)
Feb 08 Javascript
Vue keep-alive实践总结(推荐)
Aug 31 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
Sep 27 Javascript
给localStorage设置一个过期时间的方法分享
Nov 06 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
Apr 23 Javascript
jquery多级树形下拉菜单的实例代码
Jul 09 jQuery
JavaScript隐式类型转换代码实例
May 29 Javascript
jQuery中event.target和this的区别详解
Aug 13 jQuery
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 采集程序中常用的函数
2009/12/09 PHP
深入解析php之apc
2013/05/15 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
2013/02/05 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
Actionscript与javascript交互实例程序(修改)
2016/09/22 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
详解基于vue-router的动态权限控制实现方案
2017/09/28 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
Structs界面控制层技术
2013/10/11 面试题
工厂总经理岗位职责
2014/02/07 职场文书
小学生操行评语
2014/04/22 职场文书
卫生系统先进事迹
2014/05/13 职场文书
关于安全的广播稿
2014/10/23 职场文书
初中作文评语集锦
2014/12/25 职场文书
2015年物业管理工作总结
2015/04/23 职场文书