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

Vue 2 —监视器实现动态切换表单属性值

目录

一、需求背景

二、监视器语法

三、实例展示

1、HTML部分

2、JS部分

四、使用场景总结

1. 表单验证

2. 动态更新 UI

3. 数据同步

4. 计算属性的替代方案

计算属性的优势 :

简洁性:

监视器的优势 :

灵活性:

多属性依赖:

副作用管理:

5. 异步操作

7. 条件渲染

8. 数据初始化

9. 深度监听

10. 性能优化


一、需求背景

        项目中有一个功能内部要实现,用户在下拉框表单选择内容时,若切换表单选项,之前表单内选择的内容将自动重置,确保用户每次选择的内容是唯一的。

        此时,应该选择Vue中的监视器,使用监视器属性来实现上述的功能。

二、监视器语法

        在 Vue 2 中,监视器(Watcher)用于监听数据的变化,并在变化时执行相应的处理逻辑。监视器可以通过 watch 选项来定义。

watch: {// 监听单个属性propertyName: function(newVal, oldVal) {// 执行处理逻辑},// 监听嵌套属性'object.propertyName': function(newVal, oldVal) {// 执行处理逻辑},// 深度监听对象或数组object: {handler: function(newVal, oldVal) {// 执行处理逻辑},deep: true}
}

三、实例展示

1、HTML部分

在模板中,根据 form.operation 的值,动态显示不同的表单项:

        <el-col :span="24"><el-form-item label="* 说明备注:"><el-select v-model="form.operation" style="width: 80%" placeholder="请选择操作类型"><el-optionv-for="option in operationOptions":key="option.value":label="option.label":value="option.value"></el-option></el-select></el-form-item><el-form-item v-if="form.operation === '焊接'" label="* 焊接内容:"><el-selectv-model="form.weldingContent" multiple style="width: 80%" placeholder="请选择焊接内容"><el-option v-for="option in weldingOptions" :key="option.value" :label="option.label" :value="option.value"></el-option></el-select></el-form-item><el-form-item v-if="form.operation === '装配'" label="* 装配内容:"><el-selectv-model="form.assembleContent" multiple style="width: 80%" placeholder="请选择装配内容"><el-option v-for="option in assembleOptions" :key="option.value" :label="option.label" :value="option.value"></el-option></el-select></el-form-item><el-form-item v-if="form.operation === '测试'" label="* 测试结果:"><el-radio-group v-model="form.testingContent"><el-radio label="成功">成功</el-radio><el-radio label="失败">失败</el-radio></el-radio-group></el-form-item><el-form-item v-if="form.testingContent === '失败' && form.operation === '测试'" label="* 失败原因:"><el-input type="textarea" v-model="form.failureReason" style="width: 80%"placeholder="请简述失败原因"></el-input></el-form-item><el-form-item v-if="form.operation === '问题描述'" label="* 问题描述:"><el-input type="textarea" v-model="form.questReason" style="width: 80%"placeholder="请简述遇到的问题/操作"></el-input></el-form-item></el-col>

2、JS部分

  watch: {'form.operation': function(newVal) {// alert('新的操作类型:'+  newVal);this.resetFieldsBasedOnOperation(newVal);}},methods: {resetFieldsBasedOnOperation(operation) {if (operation === '焊接') {// alert(operation);this.form.testingContent = '';this.form.failureReason = '';this.form.questReason = '';this.form.assembleContent = [];} else if (operation === '测试') {this.form.weldingContent = [];this.form.questReason = '';this.form.assembleContent = [];} else if (operation === '装配') {this.form.weldingContent = [];this.form.testingContent = '';this.form.failureReason = '';this.form.questReason = '';} else if (operation === '问题描述') {this.form.weldingContent = [];this.form.testingContent = '';this.form.failureReason = '';this.form.assembleContent = [];}else if (operation === '其他') {this.form.weldingContent = [];this.form.testingContent = '';this.form.failureReason = '';this.form.questReason = '';this.form.assembleContent = [];
}

        此处的代码,使用监视器用于监听 form.operation 的变化,并在变化时调用 resetFieldsBasedOnOperation 方法来重置表单字段。 
监听嵌套属性:
'form.operation' 是一个字符串,表示要监听 form 对象中的 operation 属性。
当 form.operation 发生变化时,会触发对应的回调函数。
回调函数参数:
newVal:新值
oldVal:旧值(可选)
方法调用:
在回调函数中,调用了 resetFieldsBasedOnOperation 方法,并传入新的 operation 值。
resetFieldsBasedOnOperation 方法根据不同的 operation 值,重置表单中的相关字段。   

四、使用场景总结

Vue 2 中的监视器(Watcher)在实际开发中有多种应用场景,以下是一些常见的使用场景:

1. 表单验证

当表单字段发生变化时,可以立即进行验证并给出反馈。

watch: {'form.email': function(newVal) {if (!this.isValidEmail(newVal)) {this.formErrors.email = '请输入有效的电子邮件地址';} else {this.formErrors.email = '';}}
},
methods: {isValidEmail(email) {const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;return emailRegex.test(email);}
}

2. 动态更新 UI

当数据发生变化时,动态更新 UI 元素的状态或样式。

watch: {'user.isOnline': function(newVal) {if (newVal) {this.userStatus = '在线';} else {this.userStatus = '离线';}}
}

3. 数据同步

当某个数据源发生变化时,同步更新另一个数据源。

watch: {'localData': function(newVal) {this.syncToRemote(newVal);}
},
methods: {syncToRemote(data) {// 同步到远程服务器}
}

4. 计算属性的替代方案

        虽然计算属性(Computed Properties)更简洁,但在某些复杂情况下,使用监视器可以更灵活地处理逻辑。

使用计算属性:

// updateFullName 方法将 user.firstName 和 user.lastName 拼接成完整的姓名,并赋值给 user.fullName。
computed: {fullName() {return `${this.user.firstName} ${this.user.lastName}`;}
}

使用监视器:

watch: {'user.firstName': function(newVal) {this.updateFullName();},'user.lastName': function(newVal) {this.updateFullName();}
},
methods: {updateFullName() {this.user.fullName = `${this.user.firstName} ${this.user.lastName}`;}
}

计算属性的优势 :

简洁性:

计算属性的定义更加简洁,不需要显式地编写回调函数。
计算属性会自动缓存结果,只有在其依赖的数据发生变化时才会重新计算。

监视器的优势 :

灵活性:

监视器可以执行更复杂的逻辑,而不仅仅是简单的计算。
可以在回调函数中执行异步操作、副作用操作(如发送网络请求、修改其他数据等)。

多属性依赖:

计算属性只能依赖于当前组件的数据属性,而监视器可以监听多个属性的变化。
在上面的例子中,我们需要同时监听 user.firstName 和 user.lastName,使用监视器可以更方便地实现这一点。

副作用管理:

计算属性不适合处理有副作用的操作,因为它们会在每次依赖数据变化时重新计算。
监视器可以在数据变化时执行副作用操作,如更新其他数据、发送网络请求等。

5. 异步操作

当数据发生变化时,触发异步操作,如发送网络请求。

watch: {'user.activity': function(newVal, oldVal) {console.log(`User activity changed from ${oldVal} to ${newVal}`);}
}

具体示例:

<template><div><h1>用户活动记录</h1><select v-model="user.activity"><option value="online">在线</option><option value="offline">离线</option><option value="idle">空闲</option></select></div>
</template><script>
import axios from 'axios';export default {data() {return {user: {activity: 'online'}};},
// 监听 user.activity 属性的变化。
// 当 user.activity 发生变化时,触发回调函数,打印变化信息并调用 logUserActivity 方法watch: {'user.activity': function(newVal, oldVal) {console.log(`User activity changed from ${oldVal} to ${newVal}`);this.logUserActivity(newVal, oldVal);}},
// logUserActivity 方法是一个异步函数,使用 axios 发送 POST 请求到 /api/log-activity。methods: {async logUserActivity(newVal, oldVal) {try {const response = await axios.post('/api/log-activity', {userId: this.user.id, // 假设用户ID已经存在oldActivity: oldVal,newActivity: newVal});console.log('Activity logged successfully:', response.data);} catch (error) {console.error('Error logging activity:', error);}}}
};
</script>

7. 条件渲染

根据数据的变化,动态显示或隐藏组件。

watch: {'form.showAdvancedOptions': function(newVal) {if (newVal) {this.showAdvancedSection = true;} else {this.showAdvancedSection = false;}}
}

8. 数据初始化

在数据初始化时执行一些操作,确保初始状态正确。

watch: {'initialData': {immediate: true,handler(newVal) {if (newVal) {this.processInitialData(newVal);}}}
},
methods: {processInitialData(data) {// 处理初始数据}
}

9. 深度监听

对于复杂的数据结构,使用深度监听来捕获内部属性的变化。

watch: {'complexObject': {deep: true,handler(newVal, oldVal) {console.log('Complex object changed');}}
}

10. 性能优化

在某些情况下,可以使用监视器来优化性能,避免不必要的计算或渲染。

watch: {'largeDataset': {deep: true,handler(newVal) {this.updateChart(newVal);}}
},
methods: {updateChart(data) {// 更新图表数据}
}

相关文章:

Vue 2 —监视器实现动态切换表单属性值

目录 一、需求背景 二、监视器语法 三、实例展示 1、HTML部分 2、JS部分 四、使用场景总结 1. 表单验证 2. 动态更新 UI 3. 数据同步 4. 计算属性的替代方案 计算属性的优势 : 简洁性&#xff1a; 监视器的优势 : 灵活性&#xff1a; 多属性依赖&#xff1a; 副…...

Qt_day10_程序打包(完结)

目录 1. 设置图标 2. Debug和Release版本 3. 动态链接库 4. 打包 5. 联系项目要求 Qt开发的程序最终都是要给用户使用的&#xff0c;用户的电脑上不可能装一个Qt的开发环境导入项目使用。因此项目项目开发完成后需要打包——制作成安装包&#xff0c;用户直接下载并安装即可使用…...

golang通用后台管理系统09(系统操作日志记录)

1.日志工具类 package log/**** 日志记录 wangwei 2024-11-18 15:30*/ import ("log""os""path/filepath""time" )// 获取以当前日期命名的日志文件路径 func getLogFilePath() string {currentDate : time.Now().Format("2006-…...

如何确保爬取的数据准确性和完整性?

在数据驱动的业务环境中&#xff0c;爬虫程序的准确性和完整性至关重要。本文将探讨如何使用Java编写爬虫程序&#xff0c;并确保其在爬取数据时的准确性和完整性。 1. 精确的HTML解析 确保数据准确性的第一步是精确地解析HTML。Jsoup是Java中常用的HTML解析库&#xff0c;它提…...

【java】JDK安装

Java Downloads | Oracle 中国 next 注意安装的路径 环境变量...

科技改变工作方式:群晖NAS安装内网穿透实现个性化办公office文档分享(1)

文章目录 前言1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 前言 本文将详细介绍如何在群晖NAS上安装Synology Office和Synology Drive Server&#xff0c;并利用Cpolar内网穿透工具为本地文档配置固定的公网…...

基于Java Springboot甘肃旅游管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…...

03-axios常用的请求方法、axios错误处理

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

《天体》游戏配置要求介绍

《天体》是一款太空探索和基地建造生存游戏&#xff0c;而游戏的画面表现非常不错&#xff0c;需要的配置要求也不算高&#xff0c;CPU最低只需要英特尔的酷睿i3 4XXX 系列或者AMD的Ryzen 3 2.6ghz处理器。 天体要什么配置最低配置: 需要 64 位处理器和操作系统 操作系统 *: …...

【企业级分布式系统】 Kafka集群

文章目录 KafkaKafka 概述使用消息队列的好处 Kafka 的特性Kafka 系统架构Kafka 的应用场景Kafka 的优缺点 Kafka 集群部署下载安装包安装 KafkaKafka 命令行操作Kafka 架构深入 FilebeatKafkaELK 部署指南~部署 ZookeeperKafka 集群部署 Filebeat部署 ELK&#xff08;Logstash…...

MySQL 中有哪几种锁?

在 MySQL 中&#xff0c;锁&#xff08;Locks&#xff09;是为了保证数据的一致性和完整性而设计的机制。常见的锁可以从粒度和操作类型两个角度分类。以下是详细介绍&#xff1a; 按 粒度 分类 1. 全局锁 描述&#xff1a;锁定整个数据库实例。用途&#xff1a;主要用于备份…...

kafka中节点如何服役和退役

节点服役&#xff08;添加新节点&#xff09; 1.准备新节点&#xff1a; 安装 Kafka 和相关依赖。 配置 Kafka Broker 的 server.properties 文件&#xff0c;确保 broker.id 是唯一的&#xff0c;并且配置正确的 zookeeper.connect 地址。 重启网卡 2.启动新节点&#xff…...

HTML5实现剪刀石头布小游戏(附源码)

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面 2.效果和源码源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/143798520 HTM…...

集群聊天服务器(3)muduo网络库

目录 基于muduo的客户端服务器编程 muduo只能装在linux中&#xff0c;依赖boost库 客户端并不需要高并发 基于muduo的客户端服务器编程 支持epoll线程池&#xff0c;muduo封装了线程池 而且还有完善的日志系统 使用muduo库代码非常固定&#xff0c;基本就只有chatserver的类名…...

解决在Ubuntu 20.04中使用PyCharm时无法输入中文的问题

解决在Ubuntu 20.04中使用PyCharm时无法输入中文的问题 要解决在Ubuntu 20.04中使用PyCharm时无法输入中文的问题&#xff0c;特别是当使用IBus作为输入法框架时&#xff0c;我们需要通过设置适当的环境变量来确保PyCharm可以正确调用IBus输入法。下面将详细说明原因及解决步骤…...

【jvm】HotSpot中方法区的演进

目录 1. 说明2. JDK1.6及以前3. JDK1.74. JDK1.8及以后 1. 说明 1.在HotSpot虚拟机中&#xff0c;方法区&#xff08;Method Area&#xff09;的演进是一个重要的内存管理优化过程。2.从JDK1.6到JDK1.8&#xff0c;HotSpot虚拟机中的方法区经历了从永久代到元空间的重大变化。…...

Win10/11 安装使用 Neo4j Community Edition

如果你下载的是 Neo4j Community Edition 的压缩包&#xff0c;意味着你需要手动解压并配置 Neo4j。以下是详细的使用步骤&#xff1a; 0. 下载压缩包 访问Neo4j官网&#xff0c;找到 Community Edition 版本并选择 4.x 或者 5.x 下载&#xff1a;https://neo4j.com/deployme…...

Ubuntu 22.04 上快速搭建 Samba 文件共享服务器

Samba 简介 Samba 是一个开源软件&#xff0c;它扮演着不同操作系统间沟通的桥梁。通过实现 SMB&#xff08;Server Message Block&#xff09;协议&#xff0c;Samba 让文件和打印服务在 Windows、Linux 和 macOS 之间自由流动。 以下是 Samba 的特点&#xff1a; 跨平台兼…...

JQuery 基础知识学习(详尽版)2024.11.17

一、jQuery简介及使用详解 1.1 jQuery简介 写更少的代码&#xff0c;做更多的事&#xff1b;jQuery可以做&#xff1a;HTML 元素选取 &#xff0c; HTML 元素操作 &#xff0c;CSS 操作 &#xff0c;HTML 事件函数 &#xff0c;JavaScript 特效和动画 &#xff0c;HTML DOM 遍…...

Spring Validation参数校验

Validation Validation是Spring提供的一个参数校验框架&#xff0c;使用预定义的注解完成参数校验 使用步骤 引入Spring Validation起步依赖在需要校验的参数所在的类上添加Validated注解在需要校验的参数前面加上Pattern注解 <!--参数校验依赖--><dependency>&l…...

2026年专业金属链板输送带服务哪家强?TOP排名为你揭晓!

家人们&#xff0c;在工业生产领域&#xff0c;金属链板输送带那可是相当重要的设备&#xff0c;它的质量和服务直接影响着生产效率。今天咱就来聊聊 2026 年专业金属链板输送带服务的那些事儿&#xff0c;给大家揭晓一下排名情况&#xff0c;顺便看看哪家更值得咱们选择。冲突…...

项目管理工具怎么选?8款主流产品测评与选型建议

项目管理工具怎么选&#xff1f;真正需要比较的&#xff0c;不只是功能多少&#xff0c;而是它是否适合团队的协作方式、项目复杂度和管理阶段。本文围绕场景匹配、流程灵活性、信息沉淀、管理视图和落地成本&#xff0c;对8款主流项目管理工具做一轮顾问式测评。引言很多企业在…...

SYNBO AMA 回顾|当稳定币突破 3000 亿,一级的“钱”到底在往哪里流?

一、 聊了什么&#xff1a;背景与主题时间&#xff1a;2026 Mar 25 (Wed) 20:00 UTC8主题&#xff1a; Stablecoins Primary Market: The New Capital Stack Powering Global Payments in 2026在昨晚举行的一场围绕“稳定币、PayFi 与全球支付”的 AMA 中&#xff0c;SYNBO 与…...

C++新手必看:如何用最简单的方法找出一个数的所有因数(附GESP真题解析)

C实战指南&#xff1a;高效求解因数的5种方法及GESP真题精讲 在编程学习的道路上&#xff0c;理解基础算法就像盖房子打地基一样重要。因数计算这个看似简单的题目&#xff0c;其实蕴含着循环控制、条件判断和算法优化等核心编程思想。很多初学者在第一次遇到这类问题时&#x…...

asp毕业设计下载(全套源码+配套论文)——基于asp+access的办公系统设计与实现

基于aspaccess的办公系统设计与实现&#xff08;毕业论文程序源码&#xff09; 大家好&#xff0c;今天给大家介绍基于aspaccess的办公系统设计与实现&#xff0c;更多精选毕业设计项目实例见文末哦。 文章目录&#xff1a; 基于aspaccess的办公系统设计与实现&#xff08;毕…...

快充、便携、安全兼备,Anker能量盒到底香不香?

随着无线互联网时代的到来&#xff0c;移动设备的续航问题成为人们的新烦恼。无论是频繁出差、旅行&#xff0c;还是移动办公&#xff0c;充电宝几乎已经成为随身必备的装备。 然而&#xff0c;传统充电宝往往存在充电速度慢、体积笨重、功能单一&#xff0c;甚至安全认证不完善…...

Windows任务栏透明化技术解析:TranslucentTB架构设计与优化实践

Windows任务栏透明化技术解析&#xff1a;TranslucentTB架构设计与优化实践 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB TranslucentT…...

Llama-3.2V-11B-cot开发者案例:基于Streamlit定制化UI扩展实践

Llama-3.2V-11B-cot开发者案例&#xff1a;基于Streamlit定制化UI扩展实践 1. 项目概述 Llama-3.2V-11B-cot是一款基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具。该工具针对双卡4090环境进行了深度优化&#xff0c;特别修复了视觉权重加载的关键问题&am…...

思源宋体终极指南:免费商用中文字体解决方案从入门到精通

思源宋体终极指南&#xff1a;免费商用中文字体解决方案从入门到精通 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找高质量中文字体而烦恼&#xff1f;思源宋体这款…...

告别两阶段!用单个冻结的ConvNeXt CLIP搞定开放词汇分割,速度提升6.6倍

FC-CLIP&#xff1a;用冻结卷积CLIP重塑开放词汇分割的工程实践 开放词汇分割技术正在彻底改变计算机视觉应用的边界。想象一下&#xff0c;当自动驾驶车辆遇到从未在训练数据中出现过的障碍物&#xff0c;或是电商平台需要即时识别刚刚上市的新商品时&#xff0c;传统封闭词汇…...