element plus + vue3表单第一次数据未清空的bug问题解决
使用框架:element Plus + vue3
场景描述:
场景一:
表单的添加和修改功能,公用同一个弹框,点击修改后,点击添加表单显示的是上次修改的数据。
场景二:
点击修改,数据回显到表单,然后点击取消关闭弹框,在关闭的时候使用resetFields()清空数据,第二次点击修改的时候,回显的数据可以清空,但是表单的值会默认到第一次回显的数据。而且点击添加的时候,默认展示的就是第一次回显的数据。
官方提供表单校验以及清除数据的方法

场景一问题解决:
element plus的弹框有一个close方法,这个方法为弹框关闭时触发,在这个close方法内调用清空表单方法resetFields(),清空表单校验以及初始化表单数据。
<el-dialog
:close-on-click-modal="false"
@close="closeGift(giftBoxRef)"
:title="!isUpdate ? '添加' : '修改'"
v-model="BoxShow" >
</el-dialog>
// 关闭弹框
const closeGift = (formEl: FormInstance | undefined) => {
BoxShow.value = false;
if (!formEl) return;
formEl.resetFields(); // 清除表单校验以及表单数据初始化
};
场景二问题解决:
原因:在dialog弹框打开的时候,form表单的数据回显,这个时候表单的初始化数据其实是被回显的数据替换掉了,resetFields()在清空数据的时候,会默认恢复数据到数据的初始值,如果第一次表单回显时初始化数据被替换,那么后续resetFields()清空数据后恢复到的值会一直是第一次回显的值。
vue2
在vue2中可以使用 this.$nextTick(() => {// 这里对表单进行赋值}) 的方法解决
/* 修改 */
const updateBox = async (row: any) => {
this.$nextTick(() => {
// 这里对表单进行赋值
// formData = row
})
}
vue3
在vue3中也可以使用nextTick解决
import { nextTick } from "vue";
/* 修改 */
const dialogShow = ref(false); // 开启对话框
const updateBox = async (row: any) => {
dialogShow.value = true;
nextTick(() => {
// formData = row
});
};
nextTick 是将回调推迟到下一个 DOM 更新周期之后执行。在更改了一些数据以等待 DOM 更新后立即使用它。
注意:nesxTick建议放在函数的最后一步,如果dialogShow放在nextTick后,nextTick将不会产生作用。
表单清空的注意事项
element的resetFields()函数清空表单数据其实是跟表单上的prop属性有关的,只有表单上存在对应的prop属性,数据才会被清除。
<el-form
:model="data"
:rules="rule"
ref="giftBoxRef"
label-width="100px"
label-suffix=":"
>
<el-form-item label="名称" prop="name">
<el-input v-model="data.name" placeholder="请输入名称" />
</el-form-item>
<el-form-item label="描述">
<el-input v-model="data.priceDesc" placeholder="请输入描述" />
</el-form-item>
</el-form>
const data = ref({
name : null,
priceDesc : null
})
在这里,名称的输入框添加了prop=name,描述的部分没有添加,所以使用resetFields()清空表单数据时,只会重置data内的name值。而priceDesc的值不会有任何变化,需要手动重置。
element plus + vue3表单第一次数据未清空的bug问题解决的更多相关文章
- Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成) 动态表单生成 ElementUI官网引导 Element表单生成 Element动态增减表单,在线代码 关键配置 templa ...
- springboot打war包部署tomcat服务器,以及表单提交数据乱码处理
小白觉得springboot打成jar包直接使用内嵌的tomcat或jetty容器(java -jar xxx.jar)运行项目不利于定位问题,我还是习惯于查看tomcat或nginx的日志来定位问题 ...
- springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据
springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据 表单html: <form class="form-horizontal ...
- from表单提交数据之后,后台对象接受不到值
如果SSH框架下,前段页面通过from表单提交数据之后,在后台对象显示空值,也就是接收不到值得情况下.首先保证前段输入框有值,这个可以在提交的时候用jQuery的id或者name选择器alert弹出测 ...
- struts_表单得到数据
在大家学习struts表达式语言的时候经常会遇到,从表单的提交上面得到数据, 而如何将表单的数据得到呢? 下面就介绍其中的一种方式: :以类的方式进行注入我们以login为例子 首先可以在struts ...
- Struts2 03---数据封装+获取表单提交数据
Struts的数据封装分为三种:属性封装,模型驱动,表达式封装.下面以获取表单提交数据来简单介绍一下Struts的数据封装. <form action="loginlogin. ...
- js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题
js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题 js模拟form表单提交数据源码: /** * js模拟form表单提交 * @param ...
- <记录> axios 模拟表单提交数据
ajax 可以通过 FormData 对象模拟表单提交数据 第一种方式:自定义FormData信息 //创建formData对象 var formData = new FormData(); //添加 ...
- 给ajax表单提交数据前面加上实体名称
有时候我们后台做了一个引用类型例如: 下面的实体以C#为例 public class Order{ public string orderId{get;set;} public OrderItem o ...
- django做form表单的数据验证
我们之前写的代码都没有对前端input框输入的数据做验证,我们今天来看下,如果做form表单的数据的验证 在views文件做验证 首先用文字描述一下流程 1.在views文件中导入forms模块 2. ...
随机推荐
- redisson分布式锁原理剖析
redisson分布式锁原理剖析 相信使用过redis的,或者正在做分布式开发的童鞋都知道redisson组件,它的功能很多,但我们使用最频繁的应该还是它的分布式锁功能,少量的代码,却实现了加锁. ...
- (C++) 类与 static_cast 与 dynamic_cast
static_cast static_cast相当于C语言里面的强制转换,适用于: 用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换.进行上行转换(把派生类的指针或引用转换成基类表示) ...
- PDF、视频格式缩略图获取(pdf2img)
PDF.视频格式缩略图获取(pdf2img) 获取pdf缩略图 导入依赖: <dependency> <groupId>org.apache.pdfbox</groupI ...
- windows使用pyinstaller 打包sklearn模块出现死循环报错
前言 解决这个让我花费了很长时间, 我这里说的死循环,不是正常通过 --hidden-import能解决的问题. 因为我也查询了很多资料 但是无一例外都失败了(能通过 –hidden-import 解 ...
- Blender修改视野范围
首先,我不是专门的建模人员.但是有时候会拿到建模人员的制作的模型导入进行修改. 比如简单的删除某个模型,调整模型的尺寸. 还有就是调整模型的建模中心点,这点有时候显得特别重要,模型的中心点偏离较大会给 ...
- JavaEE Day11 BootStrap
之前:前端知识 HTML+CSS+JavaScript 不好写 今日内容:前端的开发框架,内部定义了丰富的CSS样式和JS代码,只需要拿来用就行 会用即可 一.BootStrap ...
- 【Shell脚本案例】案例6:查看网卡实时流量
一.背景 监控,对服务器查看实时流量 了解服务器的数据传输量 二.说明 1.获取网络流量 ifconfig查看网卡就能看到数据包传输情况 2.可以使用工具查看 iftop cat /proc/net/ ...
- Day33:String类及其常用方法详解
String类 1.1 String类概述 Java中字符串属于对象,String类用于创建和操作字符串. 最简单的字符串创建:直接通过String创建 String str="工地佬&qu ...
- 【QT开发问题】使用自定义的QGroupBox,重写绘图事件paintEvent后边框消失的问题
问题描述 Qt界面开发过程中,使用自定义的QGroupBox,重写绘图事件paintEvent时,出现边框被覆盖的情况,或边框消失的问题. 左图是原始状态,直接重写绘图事件后,会变成右图空白状态. ...
- (已转)Linux基础第六章 信号
6.1 前言 本章简单描述信号.信号是Linux系统中,内核和进程通信的一种方式.如果内核希望打断进程的顺序执行,那么内核会在进程的PCB中记录信号.而当这个进程被分配到CPU,进入执行状态时,首先会 ...