在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类定义例子
Sep 12 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
Mar 18 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
Apr 16 Javascript
node.js中的path.dirname方法使用说明
Dec 09 Javascript
JavaScript缓冲运动实现方法(2则示例)
Jan 08 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
Aug 02 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
Jan 10 Javascript
JS打开摄像头并截图上传示例
Feb 18 Javascript
ES6学习教程之对象的扩展详解
May 02 Javascript
Angular4表单验证代码详解
Sep 03 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
Mar 05 Javascript
如何将Node.js中的回调转换为Promise
Nov 10 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
消息持续发送的完整例子
2006/10/09 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
详解python上传文件和字符到PHP服务器
2017/11/24 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
python字符串Intern机制详解
2019/07/01 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
老教师工作总结的自我评价
2013/09/27 职场文书
自荐信包含哪些内容
2013/10/30 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
公司承诺书格式
2014/05/21 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
大客户经理岗位职责
2015/04/09 职场文书
初中物理教学反思
2016/02/19 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
python如何查找列表中元素的位置
2022/05/30 Python