在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 相关文章推荐
List Installed Software Features
Jun 11 Javascript
javascript权威指南 学习笔记之javascript数据类型
Sep 24 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
Dec 29 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
Feb 06 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
createObjectURL方法实现本地图片预览
Sep 30 Javascript
JS实现普通轮播图特效
Jan 01 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
Apr 13 Javascript
JS实现数据动态渲染的竖向步骤条
Jun 24 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
Jul 26 Javascript
vue实现lodop打印功能的示例
Nov 11 Javascript
详解Vue slot插槽
Nov 20 Vue.js
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/03/02 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
Python字符遍历的艺术
2008/09/06 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
python内存管理机制原理详解
2019/08/12 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
python变量的作用域是什么
2020/05/26 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
python缩进长度是否统一
2020/08/02 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
地质灾害防治方案
2014/05/14 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
团队拓展活动总结
2014/08/27 职场文书
Mysql 如何实现多张无关联表查询数据并分页
2021/06/05 MySQL
能让Python提速超40倍的神器Cython详解
2021/06/24 Python