当前位置: 首页 > news >正文

Vue中watch监听属性新旧值相同问题解决方案

侦听器 _watch:

作用:可以侦听data和computed中数据的变化.

语法
watch: { "被侦听的属性名" (newVal, oldVal){ } }

监听简单数据类型时可以直接使用,而监听复杂数据类型时,例如当我们只需要监听data或者computed中对象的某个属性时,可以使用字符串的形式进行监听.
//举例: 
watch: {
​    //字符串形式  表示监听item对象下的good_count属性
​    'item.goods_count'(newval) {
​      if (newval <= 0) {
​        this.item.goods_count=1    
​      }
​    }}

在watch中,如果对对象进行监听,只有对象obj被重新赋值时,watch才会被监听到,这个时候无法对obj里面的属性的变化进行监听,我们也可以给watch对象加上深度监听属性.

      handler(newval, oldval) {console.log("完整写法,监听复杂数据类型", newval);},deep: true, //表示开启深度监听immediate: true, //立即监听,在页面初始化时,会监听一次}

而监听复杂数据类型,当复杂数据类型被改变之后,newval的值改变,由于newval和oldval都指向同一个对象,导致oldval也会随之改变,打印出来则没有了old和new之分.

解决方法:在初始化的时候,深克隆一个oldval.

也有看其他人写的文章解决方案,都大差不差,都是使用一个计算属性加上深拷贝,不知道是自己理解能力有问题还是说习惯通俗的表达,看别人的回答时总感觉很拗口.于是自己总结了一下.

在我看来,解决此问题的关键在于:我们此时遇到的问题就是新值与旧值指向同一个地址的问题.而深拷贝的特点就是新开辟一个地址储存需要拷贝对象的所有属性.然后指向这个新地址. 故 JSON.parse(JSON.stringify()能完美解决其中的问题.然后与计算属性合并达到监听的属性一旦变化,自动新开辟一个地址,储存新值.而新值与旧值指向的地址不同,则解决了新值与旧值相同的问题.

  <div id="app"><input type="text" v-model="lzy.age" /></div>
</template><script>
export default {name: "App",watch: {lzy2: {handler(newvalue, oldvalue) {console.log("新值");console.log(newvalue);console.log("旧值");console.log(oldvalue);console.log(oldvalue===this.lzy);},deep: true,},},data() {return {lzy: {gender: "man",age: 21,},};},computed: {lzy2(){return JSON.parse(JSON.stringify(this.lzy))// 因为计算属性一开始就执行了一次,相当于在一开始就深拷贝拿到了oldvalue,改变之后又再一次深拷贝,每一次深拷贝生成的对象都是指向不同的地址,所以oldvalue和newvalue是两个不同的地址.},},
};
</script><style scoped>
</style>

相关文章:

Vue中watch监听属性新旧值相同问题解决方案

侦听器 _watch: 作用:可以侦听data和computed中数据的变化. 语法 watch: { "被侦听的属性名" (newVal, oldVal){ } } 监听简单数据类型时可以直接使用,而监听复杂数据类型时,例如当我们只需要监听data或者computed中对象的某个属性时,可以使用字符串的形式进行监听…...

awk案例练习

目录 一、awk练习 1.1筛选ip地址 1.2字段去重 1.3次数统计 1.4统计TCP连接状态 1.5处理字段缺失的数据 1.6筛选给定时间范围内的日志 一、awk练习 1.1筛选ip地址 ifconfig命令查看IP 利用awk进行筛选 ifconfig | awk BEGIN{RS""}NR2{print $6} RS指定输入记…...

Debian 12.1 正式发布

导读Debian 12.1 现已发布&#xff0c;这是对稳定发行版 Debian 12&#xff08;代号 Bookworm &#xff09;的首次更新。本次发布主要增加了安全问题的修正&#xff0c;并对严重问题进行了一些调整。 一些更新内容包括&#xff1a; 妥善处理系统用户的创建&#xff1b;修复 eq…...

neo4j清空数据库

清空所有Person、 Movie节点及其所有关系 MATCH (a:Person), (m:Movie) OPTIONAL MATCH (a)-[r1]-(), (m)-[r2]-() DELETE a,r1,m,r2 查询任意数据 MATCH (n) RETURN n 如果没有&#xff0c; 就说明已经删除成功了 这段代码是用Cypher查询语言编写的&#xff0c;用于清空…...

SpringBoot整合Mybatis-Plus

文章目录 前言一、Mybatis-Plus简介二、框架结构三、SpringBoot整合Mybatis-Plus1.依赖2.配置文件设置 四、前期准备4.1数据库信息4.2dao类4.3pojo类 五、常用注解5.1 TableName(value "")5.2 TableId(value"",type IdType.XXX)5.3 TableField("&qu…...

在langchain中使用自定义example selector

在langchain中使用自定义example selector 简介 在之前的文章中&#xff0c;我们提到了可以在跟大模型交互的时候&#xff0c;给大模型提供一些具体的例子内容&#xff0c;方便大模型从这些内容中获取想要的答案。这种方便的机制在langchain中叫做FewShotPromptTemplate。 如…...

pytest常用执行参数详解

1. 查看pytest所有可用参数 我们可以通过pytest -h来查看所有可用参数。 从图中可以看出&#xff0c;pytest的参数有很多&#xff0c;下面是归纳一些常用的参数&#xff1a; -s&#xff1a;输出调试信息&#xff0c;包括print打印的信息。 -v&#xff1a;显示更详细的信息。 …...

本地项目如何连接git远程仓库

在本地新建项目后&#xff0c;如何连接git远程仓库呢&#xff1f;步骤如下&#xff1a; 第一步&#xff0c; 首先我们在git上新建仓库&#xff0c;设置模板可勾选Readme文件。&#xff08;readme文件的创建是为了介绍所写代码的一些详细信息,为了之后更好的维护。&#xff09;…...

力扣 494. 目标和

题目来源&#xff1a;https://leetcode.cn/problems/target-sum/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a;将该问题转为01背包问题。 假设加法的总和为x&#xff0c;那么减法对应的总和就是sum - x。所以我们要求的是 x - (sum - x) target。x …...

Maven-搭建私有仓库

使用NEXUS REPOSITORY MANAGER 3在Windows上搭建私有仓库。 NEXUS REPOSITORY MANAGER 3 是一个仓库管理系统。 下载NEXUS3 官网上是无法下载的,所以网上搜nexus-3.18.1-01-win64就能搜到,下载即可。 安装NEXUS3 下载nexus-3.18.0-01-win64.zip至相应目录下(路径不要有中文)。 …...

PostgreSql 参数配置

一、访问控制参数配置 https://xiaosonggong.blog.csdn.net/article/details/124264877 二、数据库参数配置 2.1 概述 PostgreSQL 的参数配置参数是在 postgresql.conf 文件中集中管理的&#xff0c;类似于 Oracle 的 pfile 文件&#xff0c;除此之外&#xff0c;PostgreSQL…...

【BMC】OpenBMC开发基础2:修改原有程序

修改原有程序 通常情况下我们会需要修改OpenBMC原有的程序来适配我们的项目&#xff0c;本节将介绍一般的流程。 为此首先我们需要了解devtool这个工具&#xff0c;注意它不是前端开发用的那个devtool&#xff0c;而是由OE&#xff08;或者Yocto&#xff1f;&#xff09;提供…...

2012年数学建模竞赛脑卒中发病环境因素分析及干预日期数据处理代码

因四个表格日期数据处理有些复杂&#xff0c;故作此代码一次性处理四组数据&#xff1a; import datetime import pandas as pddef check(string, df, i, num, error_list):if is_valid(pd.to_datetime(string, errorscoerce, format%Y/%m/%d), error_list, i):df.iloc[i, nu…...

Merge和Rebase的区别

Merge 和 Rebase 是 Git 中常用的两种分支整合方式&#xff0c;它们具有不同的工作原理和效果&#xff1a; Merge&#xff08;合并&#xff09; 合并是将两个或多个分支的提交历史合并为一个新的提交。在合并时&#xff0c;Git 会创建一个新的合并提交&#xff0c;将两个分支…...

[RTKLIB]模糊度固定相关问题(二)

文章目录 一、固定模糊度的前置工作1. 做好固定模糊度的准备2. 建立双差模糊度3. 问题与总结 版权声明&#xff1a;本文为原创文章&#xff0c;版权归 Winston Qu 所有&#xff0c;转载请注明出处。 在上一篇文章中&#xff0c;介绍了RTKLIB中manage_amb_LAMBDA()函数&#xff…...

QtAV for ubuntu16.04

下载ubuntu https://releases.ubuntu.com/16.04/ubuntu-16.04.7-desktop-amd64.iso 下载ffmpeg https://ffmpeg.org/download.html 下载QtAV https://github.com/wang-bin/QtAV/releases 更新 sudo apt update 安装库 sudo apt-get install libglu1-mesa-dev freeglut3-dev…...

MFC 文件读写包括字符串的结构体

试过CString char* 写入的都是地址 struct Param{int ID;int index;char val[128]; };vector<Param>ans; UINT count 17; ans.resize(count); FILE* fp; fopen_s(&fp,_T("my.txt"),_T("rb")); if(count ! fread(&ans[0],sizeof(Param),cou…...

在家构建您的迷你聊天Chat gpt

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 什么是指令遵循模型&#xff1f; 语言模型是机器学习模型&#xff0c;可以根据句子的前一个单词预测单词概率。如果我们向模型请求下一个单词&#xff0c;并将其递减地反馈给模型以请求更多单词&#xff…...

pytest自动化测试框架之断言

前言 断言是完整的测试用例中不可或缺的因素&#xff0c;用例只有加入断言&#xff0c;将实际结果与预期结果进行比对&#xff0c;才能判断它的通过与否。 unittest 框架提供了其特有的断言方式&#xff0c;如&#xff1a;assertEqual、assertTrue、assertIn等&#xff0c;py…...

C++模板的用法

目录 模板的概念 函数模板&#xff08;Function Templates&#xff09; 基本用法 函数模板的实例化 匹配原则 类模板&#xff08;Class Templates&#xff09; 模板的概念 C中的模板&#xff08;Templates&#xff09;实际上是一种泛型编程&#xff08;Generic Programm…...

Upscayl Windows编译深度解析:从Vulkan初始化失败到成功构建的专业指南

Upscayl Windows编译深度解析&#xff1a;从Vulkan初始化失败到成功构建的专业指南 【免费下载链接】upscayl &#x1f199; Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl…...

2026时序数据库选型指南:为什么Apache IoTDB成为工业物联网首选

在数字化转型全面加速的今天&#xff0c;工业物联网、车联网、能源电力、智能制造等领域产生了海量的时序数据。这些数据具有高并发写入、海量存储、时间范围查询密集、实时分析要求高等特点&#xff0c;传统的关系型数据库和NoSQL数据库在处理这类数据时往往力不从心。 目录 …...

【ElevenLabs广西话语音落地实战】:20年语音AI专家亲授3步绕过方言合成陷阱,97.3%自然度实测达标

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs广西话语音落地实战总览 ElevenLabs 官方尚未提供原生广西话&#xff08;粤语邕浔片/平话混合语境&#xff09;语音模型&#xff0c;但通过其 API 的自定义语音微调&#xff08;Fine-tuning&…...

深度解析 StoreClaw:面向电商全域的 “懂销售” 智能体技术架构与核心实现原理

摘要随着大语言模型、多智能体协同、实时数据分析与自动化决策技术的快速迭代&#xff0c;AI 正从辅助工具向业务执行主体演进。传统电商平台数字化工具多停留在数据统计、报表展示、基础客服层面&#xff0c;缺乏具备自主感知、自主分析、自主决策、自主执行的闭环能力&#x…...

在 Clean Core 约束下扩展 SAP S/4HANA 标准 OData API

我们正在做的事情很具体,S/4HANA 后端已经能够发布产品主数据相关的 Enterprise Event,事件经过 Integration Suite、Event Mesh、Advanced Event Mesh,再进入 Kafka Event Broker,消费系统按照 product type 订阅不同的 material event。链路跑通以后,业务方很快发现一个…...

告别泊车翻车!用Python手把手教你搭建二自由度车辆模型(附代码)

二自由度车辆模型实战&#xff1a;从原理到避坑指南 泊车时方向盘打满&#xff0c;仿真结果却和实际相差十万八千里&#xff1f;很多刚入行自动驾驶仿真的工程师都踩过这个坑。二自由度模型作为车辆动力学的基础工具&#xff0c;在高速巡航等小转角场景表现优异&#xff0c;但遇…...

DataRoom:一站式开源大屏设计器终极指南,快速构建专业数据可视化大屏

DataRoom&#xff1a;一站式开源大屏设计器终极指南&#xff0c;快速构建专业数据可视化大屏 【免费下载链接】DataRoom &#x1f525;基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的大屏设计器&#xff0c;具备目录管理、DashBoard设计、预览能力&#x…...

Paradox游戏模组管理终极解决方案:IronyModManager完整使用指南

Paradox游戏模组管理终极解决方案&#xff1a;IronyModManager完整使用指南 【免费下载链接】IronyModManager Mod Manager for Paradox Games. Official Discord: https://discord.gg/t9JmY8KFrV 项目地址: https://gitcode.com/gh_mirrors/ir/IronyModManager 你是否曾…...

RISC-V架构革命:从服务器到汽车电子的开放生态与定制化实践

1. 项目概述&#xff1a;一场架构革命的序章 最近几年&#xff0c;如果你关注处理器和芯片设计&#xff0c;有一个词的出现频率会越来越高&#xff1a;RISC-V。它不再仅仅是学术论文里的概念&#xff0c;也不再是极客圈子里的玩具。从云端的数据中心服务器&#xff0c;到我们每…...

书匠策AI:你的论文过不了关?http://www.shujiangce.com这套组合拳直接救场!

开篇一句话&#xff1a;2025年写论文&#xff0c;拼的不是文笔&#xff0c;是"过关能力"。 查重40%以上被打回&#xff0c;AIGC检测疑似度超标被标记——这两座大山压在每个毕业生头上。你是不是也经历过这种绝望&#xff1a;明明每个字都是自己敲的&#xff0c;系统…...