解决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 相关文章推荐
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
Aug 15 Javascript
基于jQuery的history历史记录插件
Dec 11 Javascript
深入剖析JavaScript中的枚举功能
Mar 06 Javascript
javascript折半查找详解
Jan 26 Javascript
js获取上传文件的绝对路径实现方法
Aug 02 Javascript
解决Jquery下拉框数据动态获取的问题
Jan 25 jQuery
JS改变页面颜色源码分享
Feb 24 Javascript
Vue3.x源码调试的实现方法
Oct 13 Javascript
js中关于Blob对象的介绍与使用
Nov 29 Javascript
jQuery 选择器用法基础入门示例
Jan 04 jQuery
vue使用原生swiper代码实例
Feb 05 Javascript
es6函数之尾调用优化实例分析
Apr 25 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
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
jquery uaMatch源代码
2011/02/14 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
javascript中BOM基础知识总结
2017/02/14 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
Python中的urllib模块使用详解
2015/07/07 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
基于Python爬取爱奇艺资源过程解析
2020/03/02 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
canvas实现飞机打怪兽射击小游戏的示例代码
2018/07/09 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
Crucial英睿达法国官网:内存条及SSD固态硬盘升级
2018/07/13 全球购物
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
介绍一下Python下range()函数的用法
2013/11/07 面试题
单位提档介绍信
2014/01/17 职场文书
路政管理毕业自荐书范文
2014/02/10 职场文书
五心教育心得体会
2014/09/04 职场文书
小学运动会报道稿
2014/10/04 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
承诺书怎么写 ?
2019/04/16 职场文书