在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 相关文章推荐
如何在Mozilla Gecko 用Javascript加载XSL
Jan 09 Javascript
js 控制下拉菜单刷新的方法
Mar 03 Javascript
Javascript中的包装类型介绍
Apr 02 Javascript
jQuery插件Validate实现自定义表单验证
Jan 18 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
Mar 25 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
Jul 28 Javascript
微信小程序 template模板详解及实例
Feb 21 Javascript
js实现导航跟随效果
Nov 17 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
Oct 26 Javascript
基于JavaScript实现表格隔行换色
May 08 Javascript
vue使用video插件vue-video-player详解
Oct 23 Javascript
在Angular项目使用socket.io实现通信的方法
Jan 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 文章调用类代码
2011/08/11 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
2013/11/07 PHP
php正则表达式学习笔记
2015/11/13 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
JavaScript Canvas实现验证码
2020/08/02 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
python列表的常用操作方法小结
2016/05/21 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
村委会贫困证明
2014/01/14 职场文书
施工安全责任书
2014/04/14 职场文书
期末考试复习计划
2015/01/19 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python
Rust 连接 PostgreSQL 数据库的详细过程
2022/01/22 PostgreSQL