使用框架: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问题解决的更多相关文章

  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. java中的自动拆装箱

    一:是什么 java的自动拆装箱,是从jdk1.5之后被引入的,java中的类型分为基本类型和引用类型,而自动拆装箱,可以让基本类型和对应的包装类,无缝转换.先拿最基本的来看. public clas ...

  2. 解决 linux mint 安装显卡驱动失败解决

    前言 安装显卡驱动的基本流程就是,禁用 nouveau驱动,然后安装 nnvidia驱动,然后重启电脑.但是我重新启动, 使用NVIDIA X Server Settings查看一直显示空白,毫无疑问 ...

  3. Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板

    前言   QWT开发笔记系列整理集合,这是目前使用最为广泛的Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),使用多年,系统性的整理,本系列旨在系统解说并 ...

  4. 微软宣布 S2C2F 已被 OpenSSF 采用

    开源供应链安全对大多数 IT 领导者来说是个日益严峻的挑战,围绕确保开发人员在构建软件时如何使用和管理开源软件 (OSS) 依赖项的稳健策略至关重要.Microsoft 发布安全供应链消费框架 (S2 ...

  5. hook详解和应用

    一.hook的作用区域 1.客户端的过程 链接服务器 拿回资源 渲染(解析资源)资源 初始化(自执行) 页面逻辑 等待用户输入 加密数据 提交数据 2.hook的本质 在这些流程任意环节中插入自己的代 ...

  6. week_3

    Andrew Ng机器学习笔记 Week_3 -- -Logistic Regression This week, we'll be covering logistic regression. Log ...

  7. Web初级——模块和Bom

    模块导入 导出声明 定义时声明 在定义声明函数.类时不用加分号 // 导出数组 export let months = ['Jan', 'Feb', 'Mar','Apr', 'Aug', 'Sep' ...

  8. .Net Core Logging模块源码阅读

    .Net Core Logging模块源码阅读 前言 在Asp.Net Core Webapi项目中经常会用到ILogger,于是在空闲的时候就clone了一下官方的源码库下来研究,这里记录一下. 官 ...

  9. CodeForces 构造题专项解题报告

    CodeForces 构造题专项解题报告 \(\newcommand \m \mathbf\)\(\newcommand \oper \operatorname\) \(\text{By DaiRui ...

  10. 解决xcode每次编译都需要输入用户名和密码

    MacOS:11.1 Xcode:12.3 一.打开你的 钥匙串, 如果不知道  打开你的 spotlight搜索 工具 ,输入"钥匙串" 二.登录--->iPhone de ...