在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 相关文章推荐
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
Mar 07 Javascript
nullJavascript中创建对象的五种方法实例
May 07 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
May 27 Javascript
Js中的onblur和onfocus事件应用介绍
Aug 27 Javascript
Node.js文件操作方法汇总
Mar 22 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
Jun 22 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
Aug 02 Javascript
Vue数据驱动模拟实现5
Jan 13 Javascript
Vue实战之vue登录验证的实现代码
Oct 31 Javascript
vue实现标签云效果的方法详解
Aug 28 Javascript
vue + axios get下载文件功能
Sep 25 Javascript
JavaScript获取时区实现过程解析
Sep 24 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
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
nginx 设置多个站跨域
2021/03/09 Servers
音乐播放用的的几个函数
2006/09/07 Javascript
js 跨域和ajax 跨域问题小结
2009/07/01 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
2018/08/13 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
JavaScript显式数据类型转换详解
2019/03/18 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python 图片验证码代码分享
2012/07/04 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
python实现比较文件内容异同
2018/06/22 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
心得体会范文
2014/01/04 职场文书
小学生获奖感言范文
2014/02/02 职场文书
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
单位租房协议书范本
2014/12/04 职场文书
导游词开场白
2015/01/31 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL