在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 15 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
Mar 18 Javascript
node.js操作mongodb学习小结
Apr 25 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
Feb 17 Javascript
javascript实现标签切换代码示例
May 22 Javascript
在js中实现邮箱格式的验证方法(推荐)
Oct 24 Javascript
Javascript同时声明一连串(多个)变量的方法
Jan 23 Javascript
JS实现双击内容变为可编辑状态
Mar 03 Javascript
Js实现京东无延迟菜单效果实例(demo)
Jun 02 Javascript
微信小程序实现之手势锁功能实例代码
Jul 19 Javascript
vue实现word,pdf文件的导出功能
Jul 31 Javascript
JS前端轻量fabric.js系列之画布初始化
Aug 05 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中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
用Python实现一个简单的线程池
2015/04/07 Python
浅谈function(函数)中的动态参数
2017/04/30 Python
Django验证码的生成与使用示例
2017/05/20 Python
Python实现的特征提取操作示例
2018/12/03 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
Python搭建代理IP池实现获取IP的方法
2019/10/27 Python
python对XML文件的操作实现代码
2020/03/27 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
为什么要有struct关键字
2012/05/08 面试题
JVM是一个编译程序还是解释程序
2012/09/11 面试题
护士自我评价
2014/02/01 职场文书
中学生操行评语大全
2014/04/24 职场文书
教师学期个人总结
2015/02/11 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
导游词之太湖
2019/10/08 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang
vue实现登陆页面开发实践
2022/05/30 Vue.js