vue-router 修改或添加新参数
需求
在学习用vue做项目中,有这样一个需求,在某个页面中有一个分页组件,组件的功能有一个是点击某一数字,需要往url中push参数,但原来url中可能有其他的参数,也有可能没有其他参数,有可能已经有关于页数的参数,也有可能没有,使用$router.push()
的形式则会覆盖原有的query,因此开始了我的探索之路(可以直接看最后结论)
step 1 (查找其他方法)
主要试图找到其他方法,可以直接添加新参数或者修改已有参数,绕过需要获取已有参数的坑
很明显失败了,一个是没有找到其他方法,二是$router.push()
也没有发现满足我需求的调用方法,因此确定必须要获取原有参数,进行修改或者新增,最后调用$router.push()
完成任务
step 2 (确定思路)
经过思考,我觉得代码逻辑应该是这样:
methods: {changePage (num) {var _this = this,oldQuery = _this.$router.currentRoute.query,newQuery = _this.getNewQuery(oldQuery, 'page', num);_this.$router.push({query: newQuery})}getNewQuery (oldQuery, name, val) {var obj = {}, // 这里初始化一定是{}而不是null,否则会出错flag = false;for (key in oldQuery) {if (oldQuery.hasOwnProperty(key)) {if (key === name) {// 这里是修改已有参数obj[key] = val;flag = true;} else {obj[key] = oldQuery[key]}}}// 这里是新增参数if (!flag) {obj[name] = val}return obj;}
}
复制代码
到此已经可以完成任务了
step3 (尝试优化,假如要添加或者修改多个参数)
这样是可以完成任务的,然后我又想了一下,如果是要修改或者是添加多个参数呢,可以把要修改或者添加的放到一个对象中,大概是这样
methods: {changePage (num) {var _this = this,oldQuery = _this.$router.currentRoute.query,obj = {page: num,category: 'all'},newQuery = _this.getNewQuery(oldQuery, obj);_this.$router.push({query: newQuery})}getNewQuery (oldQuery, new) {var obj = {}, // 这里初始化一定是{}而不是null,否则会出错flag = false;obj = ....(这里还没想清楚怎么写)return obj;}
}
复制代码
这时突然发现,这不就是两个对象合并吗,好像有个原生方法可以直接用啊——Object.assign(obj1, obj2)
,如果能成功的话,那根本不用写个新函数啊(当初我还再想为啥vue-router不提供一个类似我上面实现的函数)
step4 (尝试Object.assign())
因为这里涉及到深浅拷贝的知识,我就顺便又学习了一下深浅拷贝,对象深拷贝的两种方法
methods: {changePage (num) {Object.assign(_this.$router.currentRoute.query, {page: num})}
}
复制代码
讲道理我感觉已经完成任务了,但实际情况是我打开devtool,发现$route.query
确实和我想的一样变化,但是url
没有变,可能直接修改$route.query
参数不管用,必须调用$route.push()
方法,因此再作调整(这里究竟为什么直接改query参数不管用,应该是涉及到了vue-router的源码实现,目前这阶段,我就先忽视了。。。):
final
methods: {changePage (num) {var _this = this,obj = JSON.parse(JSON.stringify(_this.$router.currentRoute.query)) // 这里我们需要的应该是值,因此必须转为深拷贝Object.assign(obj, {page: num})_this.$router.push({query: obj})}
}
复制代码
成功!(不忘忘记巩固一下数组、对象各自的深浅拷贝方法啊)
转载于:https://juejin.im/post/5cc407ed6fb9a0321f04219b
vue-router 修改或添加新参数相关推荐
- vue elementUI 默认事件 添加额外参数
vue elementUI 默认事件 添加额外参数 有如下需求,在表格中有多个树形,点击树形获取的节点的事件为 <el-table><el-table-column><t ...
- vue router获取整条路径参数
$route.path 当前路由对象的路径,如'/vi $route.query 请求参数,如/foo?user=1获取到query.user = 1 $route.router 所属路由器以及所属组 ...
- 修改Visual Studio中“添加新项”时默认添加的命名空间
最近要修改一个以前开发的项目,项目中并没有运用Linq,但是我在VS2008中添加新项都会自动添加Linq命名空间,每次都要手动去删除很麻烦,就想想有没有办法可以修改这个"添加新项" ...
- Vue Router参数大全
Vue Router对象创建 Vue Router构建选项详解 参数 类型 默认值 可选值 描述 routes Array 配置路由规则 mode string "hash" (浏 ...
- 【Vue】相关生态——Vue Router路由
Vue Router路由 基本使用 带参数的动态路由匹配 捕获所有路由或404 Not found 路由 嵌套路由 编程式导航 重定向和别名 将props传递给路由组件 不同的历史模式 进阶 导航守卫 ...
- 重构ElementUI解决DatePicker日期选择组件修改父组件placement参数问题[Vue.js项目实践: 新冠自检系统]
新冠疫情自我检测系统网页设计开发文档 Sylvan Ding 的第一个基于 Vue.js 的项目. 本项目所提供的信息,只供参考之用,不保证信息的准确性.有效性.及时性和完整性,更多内容请查看国家卫健 ...
- vue router 参数_Vue.js项目开发技术解析
Vue.js项目开发技术解析 一.Vue.js实例 在一个Vue.js工程中,用于显示内容最基层的实例称之为根实例.通过该实例可以进行页面或组件的更新和显示.对于项目本身而言,无论是什么样的页面,都要 ...
- vue 什么是渐进式 响应式 意思。Vue常用的指令。VUE:跨域设置。vue router 新窗口。$router.push。
Vue 是 轻量的 模型视图视图模型 框架.就是数据的双向开发. 数据驱动+组件化开发. 渐进式框架. 官网:cn.vuejs.org 在读 Vue2.0 文档的时候,介绍"Vue.js( ...
- vue 传递 对象 路由_vue 04 -vue路由对象($route)参数简介以及和router的区别
vue路由对象($route) 在使用了 vue-router 的应用中,路由对象会被注入每个组件中,赋值为 this.$route ,并且当路由切换时,路由对象会被更新. so , 路由对象暴露了以 ...
- 【Vue】添加新页面
在[src\components\]路径下添加新vue文件,例如下图(图省事直接就复制了HelloWorld.vue,修改了一下里面的内容,需要懂html基础即可) 注意修改name 在[src\ro ...
最新文章
- C# 获得系统AppData路径
- Linux Logwatch 使用说明
- python matplotlab.pyplot.grid() 函数
- 【GoLang】GoLang 错误处理 -- 异常处理思路示例
- JavaScript实现计算需要更改的位数,以便将 numberA转换为 numberB(bitsDiff)算法(附完整源码)
- Adobe 中国区 "Adobe RIA 开发工程师认证考试" 正式发布
- java 打印 模板_Java输入输出模板
- ☆【CodeForces - 764C】Timofey and a tree (思维题,树的性质)
- Web Api 中使用 PCM TO WAV 的语音操作
- VMware vSAN6.7 设计和优化 vSAN 主机 vSAN 6.5带来七大更新 解读VMware超融合增长秘诀
- 计算机系统结构与组成原理
- 袋鼠云数智之旅·上海站|探索“十四五”智慧校园新图景
- 西北工业大学网络空间安全考研经验分享
- 爬虫实用分析工具网址
- 【论文泛读171】具有对抗性扰动的自监督对比学习,用于鲁棒的预训练语言模型
- Eslint代码规范
- excel 2种方法将长日期修改成短日期
- python中的正则表达式re模块_Python中的re模块--正则表达式
- 有趣的三个水桶等分8升水问题
- AB实验只是开始!如何归因才是王道!
热门文章
- 涉密计算机多用户审批表,涉密计算机及信息系统安全策略
- b站 前端构架_技术干货:哔哩哔哩(B站)功能框架图
- ai 数据模型 下载_为什么需要将AI模型像数据一样对待
- 机器学习 结构化数据_聊天机器人:根据结构化数据创建自然语言
- 例2.11 FatMouse' Trade - 九度教程第21题(贪心算法)
- C++string基本概念
- Mac效率:配置Alfred web search
- maven profile参数动态打入
- zabbix(三)—— update
- [Unity 3D] Unity 3D 性能优化(二)