解决vue watch数据的方法被调用了两次的问题


Posted in Javascript onNovember 07, 2020

背景:

路由结构/video/1.mp4,即/video是父路由,/1.mp4是/video的动态子路由,在/video父路由中会通过url的params获取视频信息,即通过/1.mp4获取对应的视频完整信息,然后通过props传到动态子路由中,然后子路由通过接受到的视频对象,进行展示

问题:

当路由切换时,即当我点击其他视频时,导致动态子路由变化时,我监听了/video父路由的变化并重新根据url的params获取视频对象,并自动通过props传入子路由中,我在子路由中通过watch 视频对象来进行一些操作,结果

watch: { 
 video () {
 console.log("test")
 }
}

test被打印了两次,通过一番查找,才发现,当子路由切换时,父路由/video中的data数据都会被初始化为默认值,所以导致video对象变化了两次,一次是因为初始化被重置为默认值空对象,一次是请求后的正确数据

结局:

将video对象存到vuex中,然后父路由将vuex中的video对象传给子路由就行了

补充知识:vue watch一个对象或数组时,newvalue和oldvalue一样

在官方的代码改写了一下,当深度watch一个对象时,newval和oldval的值为什么是相等的呢?

var vm = new Vue({
 data: {
 a: 1,
  c:{
   c1:1,
   c2:2
  }
 },
 watch: {
 'a': function (val, oldVal) {
  console.log(val, oldVal,(val== oldVal))
 },
 // 方法名
 'b': 'someMethod',
 // 深度 watcher
 'c': {
  handler: function (val, oldVal) { 
   console.log(val, oldVal,(val== oldVal))
   },
  deep: true
 }
 }
})
  
vm.a = 2 
vm.c.c1 = 2

和深度无关,而是在修改(不是替换)对象或数组时,旧值将与新值相同,因为它们索引同一个对象/数组。Vue 不会保留修改之前值的副本。

以上这篇解决vue watch数据的方法被调用了两次的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript this调用规则说明
Mar 08 Javascript
JQuery自定义事件的应用 JQuery最佳实践
Aug 01 Javascript
JavaScript初学者应注意的七个细节小结
Jan 30 Javascript
javascript分页代码(当前页码居中)
Sep 20 Javascript
Javascript实现计算个人所得税
May 10 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
Aug 06 Javascript
vue2.0中click点击当前li实现动态切换class
Jun 21 Javascript
Angularjs中ng-repeat的简单实例
Aug 25 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
Sep 12 Javascript
Vue响应式原理深入解析及注意事项
Dec 11 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
Sep 24 Javascript
JavaScript常用8种数组去重代码实例
Sep 09 Javascript
vue 避免变量赋值后双向绑定的操作
Nov 07 #Javascript
浅谈Vue static 静态资源路径 和 style问题
Nov 07 #Javascript
解决VueCil代理本地proxytable无效报错404的问题
Nov 07 #Javascript
Nuxt 项目性能优化调研分析
Nov 07 #Javascript
js实现日历
Nov 07 #Javascript
工作中常用js功能汇总
Nov 07 #Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
Nov 07 #Javascript
You might like
php使用curl访问https示例分享
2014/01/17 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
js中Math之random,round,ceil,floor的用法总结
2013/12/26 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
python encode和decode的妙用
2009/09/02 Python
Python基于select实现的socket服务器
2016/04/13 Python
一张图带我们入门Python基础教程
2017/02/05 Python
Python实现KNN邻近算法
2021/01/28 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
python+os根据文件名自动生成文本
2019/03/21 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
python3多线程知识点总结
2019/09/26 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
绝对经典成功的大学生推荐信
2013/11/08 职场文书
岗位职责的定义
2013/11/10 职场文书
京剧自荐信
2014/01/26 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
小学工作总结2015
2015/05/04 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS