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

记录使用el-form的resetFields时遇到的表单数据回显失败的问题,去除nextTick解决

首先简单介绍一下resetFields的基础作用

element-plus官网el-form介绍
在这里插入图片描述
本案例中实现点击每行的编辑按钮时,弹出弹窗和表单
在这里插入图片描述
由于设置了表单校验,如图,表单内容不符合设定的校验规则时会有提示
在这里插入图片描述
如果仅仅这样就会出现问题,下次打开表单时,表单上还会显示红色提示字,对用户就很不友好,因此需要使用resetFields进行消除校验
使用先很简单,首先对el-form绑定refform="formRef"

<el-form:model="formData"label-position="top":rules="rules"ref="formRef"v-loading="loading">表单内容部分
</el-form>

在自己需要的地方执行函数就行了,记得提前定义formRef

const formRef=ref(null)
//自定义执行逻辑
//清空表单校验情况if (formRef.value) {formRef.value.resetFields()}

遇到的问题介绍

首先给大家说明一下我的函数执行逻辑
用户点击增加或编辑按钮打开对话框 - -> 调用自定义的resetForm函数重置表单数据并清空校验状态 - -> 如果用户点击的编辑按钮,回显数据到表单上
附上相关代码

//点击编辑用户打开对话框
const onClickOpenEditDialog = function (row) {resetForm()//数据回显formData.value.birthday = row.birthdayformData.value.name = row.nameformData.value.citizenId = row.citizenIdid.value = row.id//打开弹框dialogFormVisible.value = true
}//重置表单数据
const resetForm = function () {formData.value = {citizenId: '',name: '',birthday: null}loading.value = false//清空表单校验情况nextTick(() => {if (formRef.value) {formRef.value.resetFields()}
})
}

重点在于,众所周知dom元素渲染需要时间,我为了防止dom还没加载出来,formRef还没绑定的时候就调用resetFields函数,因此添加了nextTick

遇到的问题

第一次打开编辑弹窗时,表单成功回显出该行的数据,之后无论在哪行打开弹窗,表单内容都还保留第一次打开的数据!
问题就出在刚才添加的nextTick上,由于我在执行resetForm函数后再对表单数据进行赋值,nextTick后执行的resetFields函数又重新设置值了,导致表单数据回显失败

解决方法

去掉nextTick即可,由于调用formRef的resetFields之前有添加if判断,因此就算第一次打开弹窗,ref元素还没加载成功也不会报错

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C#初级——条件判断语句、循环语句和运算符
  • 文件系统中元数据的隐患——缓存
  • prompt面试三道题
  • mysql的主从复制和读写分离
  • Java二十三种设计模式-代理模式模式(8/23)
  • 正点原子imx6ull-mini移植文件系统
  • 视频加密软件哪个好?怎么进行视频文件加密?
  • pyenv-win | python版本管理,无需卸载当前版本
  • 上传文件传参 pc端vue的formData
  • Jenkins集成JDK、git、gitee、maven逐步实现自动拉取,自动部署,自动启动
  • 重塑生态体系 深挖应用场景 萤石诠释AI时代智慧生活新图景
  • 前端练习<HtmlCSS>——照片墙(附完整代码及实现效果)
  • 嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化:智能物流管理系统设计思路流程(附代码示例)
  • hamcrest 断言框架使用示例和优势分析
  • 与Bug较量:Codigger之软件项目体检Software Project HealthCheck来帮忙
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 5、React组件事件详解
  • ES6系列(二)变量的解构赋值
  • extjs4学习之配置
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Rancher-k8s加速安装文档
  • spring boot 整合mybatis 无法输出sql的问题
  • Web标准制定过程
  • 阿里云购买磁盘后挂载
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 仿天猫超市收藏抛物线动画工具库
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 警报:线上事故之CountDownLatch的威力
  • 如何实现 font-size 的响应式
  • 设计模式 开闭原则
  • 微信小程序填坑清单
  • 小而合理的前端理论:rscss和rsjs
  • 与 ConTeXt MkIV 官方文档的接驳
  • Java数据解析之JSON
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​zookeeper集群配置与启动
  • ​比特币大跌的 2 个原因
  • (11)MATLAB PCA+SVM 人脸识别
  • (11)MSP430F5529 定时器B
  • (8)STL算法之替换
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (算法)前K大的和
  • (一)SvelteKit教程:hello world
  • (转)Google的Objective-C编码规范
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • ... 是什么 ?... 有什么用处?
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NetCore部署微服务(二)