解决vue watch数据的方法被调用了两次的问题
作者:巴中第一皇子 发布时间:2024-05-05 09:10:33
标签:vue,watch数据,调用
背景:
路由结构/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 不会保留修改之前值的副本。
来源:https://blog.csdn.net/weixin_38312502/article/details/105199577
0
投稿
猜你喜欢
- 引言之前松哥写过一个 MySQL 系列,但是当时是基于 MySQL5.7 的,最近有空在看 MySQL8 的文档,发现和 MySQL5.7
- 本文实例讲述了jQuery实现简单复制json对象和json对象集合操作。分享给大家供大家参考,具体如下:<!DOCTYPE html
- 前言对MySQL有研究的读者,可能会发现MySQL更新很快,在安装方式上,MySQL提供了两种经典安装方式:解压式和一键式,虽然是两种安装方
- 缘由最近在做公司的一个点餐H5项目需要前端动态计算用户选的商品的总价(单价*数量)和购物车的总价格时发现关于 JavaScript 浮点数计
- hello.html 文件代码如下:HelloWorld/templates/hello.html 文件代码:<h1>{{ he
- 保存文件名太长OSError: [Errno 36] File name too lon问题描述安装pip install python-d
- 写在前面:在个别时候可能需要查看当前最新的事务 ID,以便做一些业务逻辑上的判断(例如利用事务 ID 变化以及前后时差,统计每次事务的响应时
- Python的 eval() 允许从基于字符串或基于编译代码的输入中计算任意Python表达式。当从字符串或编译后的代码
- 使用正则提取数据,请求库requests,看代码,在存入数据库时,报错ERROR 1054 (42S22): Unknown column
- 本文将想大家简单介绍一下XML HttpRequst对象基础方法,希望通过本文能够使大家对其有一个初步的了解readyState一共有5个可
- Prometheus 为开发这提供了客户端工具,用于为自己的中间件开发Exporter,对接Prometheus 。目前支持的客户端GoJa
- 文件名:Awa_temp.Class.asp 代码如下:<% 'Crazy蛙!模板操作类 '作者C
- 一、解析网站1.1 获取音频地址在喜马拉雅网站上,随便点开一个音频,打开“开发者工具”,再点击播放按钮,可以看到出现了多个请求:经过排查,发
- 用Matplotlib画三维图最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatte
- 目录一、熟悉designer——设计界面的神器1.首先打开designer。2.创建窗口3.熟悉各部功能区域二、设计自己的第一个GUI。1.
- 定时任务是老生常谈了,因为我们总是需要定时修改特定的数据。实现它的方法肯定不止一种,但我在相当长一段时间里都是用程序编码去做的,今天突然想到
- 前言 可迭代对象就像密闭容器里的水,有货倒不出itertools是python内置的标准模块,提供了很多简洁又高效的专用功能,使用
- 我们经常见到很多网站留言系统的显示访客的IP地址都是隐藏了一部分,以达到隐蔽访客真实地理位置的功能。如:111.222.333.*,当然在系
- layui数据表格批量删除多条件搜索框:注样式自己写<div class="demoTable" style=&q
- 什么是计算属性???1、在computed中,可以定义一些属性,这些属性叫做【计算属性】2、计算属性的本质是一个方法,不过一般是将他们的名称