使用框架: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将不会产生作用。


表单清空的注意事项

elementresetFields()函数清空表单数据其实是跟表单上的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问题解决的更多相关文章

  1. Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)

    Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成) 动态表单生成 ElementUI官网引导 Element表单生成 Element动态增减表单,在线代码 关键配置 templa ...

  2. springboot打war包部署tomcat服务器,以及表单提交数据乱码处理

    小白觉得springboot打成jar包直接使用内嵌的tomcat或jetty容器(java -jar xxx.jar)运行项目不利于定位问题,我还是习惯于查看tomcat或nginx的日志来定位问题 ...

  3. springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据

    springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据 表单html: <form class="form-horizontal ...

  4. from表单提交数据之后,后台对象接受不到值

    如果SSH框架下,前段页面通过from表单提交数据之后,在后台对象显示空值,也就是接收不到值得情况下.首先保证前段输入框有值,这个可以在提交的时候用jQuery的id或者name选择器alert弹出测 ...

  5. struts_表单得到数据

    在大家学习struts表达式语言的时候经常会遇到,从表单的提交上面得到数据, 而如何将表单的数据得到呢? 下面就介绍其中的一种方式: :以类的方式进行注入我们以login为例子 首先可以在struts ...

  6. Struts2 03---数据封装+获取表单提交数据

        Struts的数据封装分为三种:属性封装,模型驱动,表达式封装.下面以获取表单提交数据来简单介绍一下Struts的数据封装. <form action="loginlogin. ...

  7. js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题

    js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题 js模拟form表单提交数据源码: /** * js模拟form表单提交 * @param ...

  8. <记录> axios 模拟表单提交数据

    ajax 可以通过 FormData 对象模拟表单提交数据 第一种方式:自定义FormData信息 //创建formData对象 var formData = new FormData(); //添加 ...

  9. 给ajax表单提交数据前面加上实体名称

    有时候我们后台做了一个引用类型例如: 下面的实体以C#为例 public class Order{ public string orderId{get;set;} public OrderItem o ...

  10. django做form表单的数据验证

    我们之前写的代码都没有对前端input框输入的数据做验证,我们今天来看下,如果做form表单的数据的验证 在views文件做验证 首先用文字描述一下流程 1.在views文件中导入forms模块 2. ...

随机推荐

  1. python安装/环境变量配置/多版本共存

    Python学习之路Day02: 一.今日学习内容概括: 计算机五大组成部分详解 计算机三大核心硬件 操作系统 编程与编程语言 编程语言的发展 编程语言分类 python解释器 Python Pyth ...

  2. 1. PyQt5开发环境的搭建

    专栏地址 ʅ(‾◡◝)ʃ 因为我个人使用的是 Linux 还有之前用过Windows 没用过 Mac 所以这里我简单结束 Linux 和 Windows 开发环境的搭建 Windows 开发PyQt5 ...

  3. BFS和DFS学习笔记

    1 算法介绍 1.1 BFS Breadth First Search(广度优先搜索),将相邻的节点一层层查找,找到最多的 以上图为例,首先确定一个根节点,然后依次在剩下的节点中找已找出的节点的相邻节 ...

  4. 【离线数仓CDH版本】即席查询工具(Presto、Druid、Kylin)、CDH数仓、Impala查询

    1.即席查询 一.Presto 大数据量.秒级.多数据源的查询引擎[支持各种数据源work的内存级查询] 由coordinator和多个work构成,work对应不同数据源Catalog 特点:基于内 ...

  5. 日爬百万数据的域名限制、url的清洗和管理

    一.域名去重1.检测开头:link.startswith('http') txt = "Hello, welcome to my world." x = txt.startswit ...

  6. 大数据-业务数据采集-FlinkCDC

    CDC CDC 是 Change Data Capture(变更数据获取)的简称.核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入.更新以及删除等),将这些变更按发生的顺序完整记录下来,写入 ...

  7. hashlib模块、subprocess模块、loggin日志模块及实战

    hashlib加密模块 目录 hashlib加密模块 加密补充说明 subprocess模块 logging日志模块 日志的组成 日志配置字典 配置参数 1.何为加密 将明文数据处理成密文数据 让人无 ...

  8. ob-myfreemp3

    网站 aHR0cDovL3Rvb2wubGl1bWluZ3llLmNuL211c2ljLw== 打开之后随便搜一个歌手的名字或歌曲(这里搜林俊杰)  m/api/search,可以看到数据全在这里 全 ...

  9. day12-功能实现11

    家居网购项目实现011 以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git 27.功能25-事务管理 27.1下订单问题思考 在生成 ...

  10. [图像处理] YUV图像处理入门1

    目前数字图像处理技术已经应用生活各个方面,但是大部分教程都是利用第三方库(如opencv)对RGB图像格式进行处理.对于YUV图像格式的图像处理教程较少.于是博主搬运总结了多个大牛的文章,总结出来这个 ...