vue3 +element-plus中避免一打开表单的下拉选择的change事件自动校验问题

news/2024/7/10 1:11:38 标签: vue, 前端

背景:新增和编辑共用一个弹窗时,每次打开新增弹窗,el-select的表单项会触发change事件的自动校验。我这里的下拉选择是支持多选的,也就是属性上有multiple
在这里插入图片描述

以下解决方法,亲测有用!!

1. 该表单项设置初始值为空数组,每次打开表单在nextTick中重置表单项

const showEditDialog = async (type: 'add' | 'mod', row?) => {
  await getInterfaceList();
    nextTick(() => {
    ruleFormRef?.value?.resetFields();
  })
  state.editType = type;
  if (type === 'add') {
    state.dialogTitle = '添加策略配置';
  } else {
    state.dialogTitle = '编辑策略配置';
    state.ruleForm = _.cloneDeep(row);//防止编辑时的表单影响这行表格数据
    state.oldCode = row.code;
  }
};

2. 关闭弹窗使用 close事件,手动重置表单项

注意:不要使用destroy-on-close,不然会第二次打开表单时,上回的值还存在。

<el-drawer v-model="visible" :title="state.dialogTitle" direction="rtl" size="400px" :close-on-click-modal="false"
  @close="handleClose">
  ...
 </el-drawer>   
const handleClose = () => {
  visible.value = false;
  ruleFormRef.value?.resetFields();// 只会重置必填项表单项(el-form-item有prop那个),并移除校验结果
  state.ruleForm = {} as api.StrategyConfForm;//让非必填项也清空
}

之前导致问题的错误写法:

<el-drawer v-model="visible" :title="state.dialogTitle" direction="rtl" size="400px" :close-on-click-modal="false"
  destroy-on-close>
   ...
 </el-drawer>   
const showEditDialog = async (type: 'add' | 'mod', row?) => {
  ruleFormRef.value?.resetFields();
  await getInterfaceList();
  state.ruleForm = {} as api.StrategyConfForm;
  state.editType = type;
  if (type === 'add') {
    state.dialogTitle = '添加策略配置';
  } else {
    state.dialogTitle = '编辑策略配置';
    state.ruleForm = _.cloneDeep(row);
    state.oldCode = row.code;
  }
};

出现问题的原因:

每次打开弹窗时将整个表单项设为空对象,el-select那一个表单项没有给初始值为空数值,所以会检测到这项是为空的,触发change事件校验。
改了下,这样也是可以的,关闭时再使用 close事件,手动重置表单项。

const showEditDialog = async (type: 'add' | 'mod', row?) => {
  await getInterfaceList();
  state.ruleForm = {} as api.StrategyConfForm;
 state.ruleForm.interfaceIds = [];//这里要给它设置初始值为空数组,不然会触发change事件校验
  state.editType = type;
  if (type === 'add') {
    state.dialogTitle = '添加策略配置';
  } else {
    state.dialogTitle = '编辑策略配置';
    state.ruleForm = _.cloneDeep(row);
    state.oldCode = row.code;
  }
};

http://www.niftyadmin.cn/n/4990654.html

相关文章

电商卖家保障数据隐私和安全用什么安全的浏览器?

在如今信息爆炸的时代&#xff0c;个人数据安全成为了一个备受关注的话题。越来越多的人意识到&#xff0c;保护个人数据的重要性。为此&#xff0c;安全浏览器应运而生&#xff0c;为用户提供更加安全可靠的上网环境&#xff0c;保障个人数据的安全。 一、数据安全的重要性 …

若依后台管理系统学习

前端系统是指运行在浏览器或者移动设备上的用户界面层&#xff0c;它负责与用户交互&#xff0c;展示数据&#xff0c;调用后端服务等。前端系统的架构设计需要考虑以下几个方面&#xff1a; 前端系统在整个系统中的位置和关系&#xff1a;你需要明确前端系统与后端服务&#…

使用生成式 AI 和 ML 模型进行电子邮件和移动主题行优化

结合使用生成式 AI 和 ML 模型,根据语气和受众自动创建引人注目的主题行和标题,以实现最大程度的参与。 电子邮件和推送通知的主题行和标题在确定参与率方面发挥着重要作用。数字通信需要精心设计引人注目的主题行和简洁的推送通知标题来吸引用户的注意力。营销人员根据要传递…

雅思写作 三小时浓缩学习顾家北 笔记总结(二)

目录 饥饿网一百句翻译 Using government funds for pollution cleanup work can create a comfortable environment. "Allocating government funds to pollution cleanup work can contribute to the creation of a comfortable environment." Some advertise…

工具类--MD5加密

package com.itzhh; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;/*** Author: zhh* Date: 2023-08-31 14:58* Description: <MD5加密>*/public final class MD5 {public static String encrypt(String strSrc) {try {char hexC…

Linux socket网络编程实战(tcp)实现双方聊天

在上节已经系统介绍了大致的流程和相关的API&#xff0c;这节就开始写代码&#xff01; 回顾上节的流程&#xff1a; 创建一个NET文件夹 来存放网络编程相关的代码&#xff1a; tcp服务端代码初步实现--上 这部分先实现服务器的连接部分的代码并进行验证 server1.c&#xff…

关于在香橙派安装mysql时遇到的坑

前言 基础环境&#xff1a;硬件&#xff1a;香橙派5操作系统&#xff1a;openkylincpu架构&#xff1a;arm 过程&#xff1a;最近有个任务&#xff0c;要在新的环境中验证一些服务是否可用。目的时向全国产化靠拢。 需要在香橙派上安装openkylin&#xff0c;一开始尝试的是香橙…

在Ubuntu Linux系统上安装RabbitMQ服务并解决公网远程访问问题

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…