vue绕过rules自定义编写动态校验

今天犯了个低级错误,虽然走了很多弯路,但这个过程还是值得记录一下

例子如下,有两个输入框:

第一个是套餐选择下拉框,可以下拉选择三个内容

第二个要根据上面的套餐选择三个选项来决定怎么显示,使用v-if(第一个下拉框的值来做条件显示)

(1)如果套餐选择招牌冰淇淋,第二个输入框就是招牌冰淇淋下拉框,

就以下拉框的形式显示口味

(2)如果套餐选择小吃,第二个输入框就是小吃输入框,

就让客户自己填写什么小吃

(2)如果套餐选择冷饮,第二个输入框就是冷饮输入框,

就让客户自己填写什么冷饮

然后无论第一个套餐选择选哪个选项,都要对第二个框进行非空、长度规则等校验,剩下的两个没选的就不做校验,这里其实v-if取了第一个下拉框的值来对第二个输入框做条件显示的时候,另外两个就不会显示,即不走rules,但我没把第二个输入框的规则写在rules里面,自己做了一个验证规则

具体逻辑就是在确定按钮提交表单时,调取this.validateForm()方法去校验一下第一下选的是哪个选项,再决定去校验后面的哪个输入框

核心校验代码: 

 

详细代码: 

<!--第一个下拉框-->
<el-form-item label="套餐选择" prop="setMealType">
  <el-select v-model="form.setMealType" placeholder="请选择变更类型" size="small" clearable>
    <el-option label="招牌冰淇淋" value="1"></el-option>
    <el-option label="小吃" value="2"></el-option>
    <el-option label="冷饮" value="3"></el-option>
  </el-select>
</el-form-item>
<!--        第二个输入框(1号)-->
<el-form-item label="招牌冰淇淋" prop="newVehicleColour" v-if="form.setMealType === '1'">
  <el-select v-model="form.newVehicleColour" placeholder="请选择冰淇淋口味" filterable clearable size="small">
    <el-option label="香草冰淇淋" value="1"></el-option>
    <el-option label="牛奶红枣" value="2"></el-option>
    <el-option label="薄荷香芋" value="3"></el-option>
  </el-select>
  <div>
    <span v-if="errors.newVehicleColour" class="err">口味不能为空!</span>
  </div>
</el-form-item>
        <!--        第二个输入框(2号)-->
<el-form-item label="小吃" prop="newMotornumber" v-if="form.setMealType === '2'">
  <el-input v-model="form.newMotornumber"  placeholder="请输入小吃" maxlength="30" ></el-input>
  <span v-if="errors.newMotornumber" class="err">小吃不能为空!</span>
</el-form-item>
        <!--        第二个输入框(3号)-->
<el-form-item label="冷饮" prop="newBatteryNum" v-else-if="form.setMealType === '3'">
  <el-input v-model="form.newBatteryNum" placeholder="请输入冷饮" maxlength="30" />
  <span v-if="errors.newBatteryNum" class="err">冷饮不能为空!</span>
</el-form-item>

 data和rules:(data声明errors , rules仅对第一个输入框校验)

data() {
      return {
        // 遮罩层
        loading: true,
        //表单参数
        form: {},
        // 错误信息
        errors: {},
        // 表单校验
        rules: {
          changeType: [{
            required: true,
            message: "请选择套餐类型",
            trigger: "blur"
          }],
        }
      };
    },

表单重置:(将this.errors置空)

 // 表单重置
      reset() {
        this.form = {
          id: null,
            ...
            ...
          createBy: null,
          createTime: null,
          updateBy: null,
          updateTime: null,
          remark: null
        };
        this.errors = {};
        this.resetForm("form");
      },

校验规则:


      // 自定义校验方法
      validateField(field) {
        this.errors[field] = '';
        if (!this.form[field]) {
          this.errors[field] = `${field} 不能为空!`;
        }
      },
      // 校验所有字段
      validateForm() {
        this.errors = {};

        if (this.form.changeType === '1') {
          this.validateField('newVehicleColour');
        } else if (this.form.changeType === '2') {
          this.validateField('newMotornumber');
        } else if (this.form.changeType === '3') {
          this.validateField('newBatteryNum');
        }
        // 检查是否有错误
        for (const key in this.errors) {
          if (this.errors[key]) {
            // this.$message.error(this.errors[key]);
            return false;
          }
        }
        return true;
      },

重置按钮:

 /** 重置按钮操作 */
      resetQuery() {
        this.errors = {};
        this.resetForm("queryForm");
        this.handleQuery();
      },

表单提交按钮:

 /** 提交按钮 */
      submitForm() {
        if (this.validateForm()) {
          // 表单验证通过
          console.log('表单验证通过', this.form);
          this.$refs["form"].validate(valid => {
            if (valid) {
              if (this.form.id != null) {
                update(this.form).then(response => {
                  this.$modal.msgSuccess("修改成功");
                  this.open = false;
                  this.getList();
                });
              } else {
                add(this.form).then(response => {
                  this.$modal.msgSuccess("新增成功");
                  this.open = false;
                  this.getList();
                });
              }
            }
          });
          // 这里可以添加提交表单的逻辑
        } else {
          // 表单验证失败
          console.log('规则验证失败', this.errors);
        }
      },

自定义提示语样式

<style>.err {
  color: red;
  font-size: 12px;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936154.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ABAQUS进行焊接仿真分析(含子程序)

0 前言 焊接技术作为现代制造业中的重要连接工艺,广泛应用于汽车、船舶、航空航天、能源等多个行业。焊接接头的质量和性能直接影响到结构件的安全性、可靠性和使用寿命。因此,在焊接过程中如何有效预测和优化焊接过程中的热效应、应力变化以及材料变形等问题,成为了焊接研…

【efinance一个2k星的库】

efinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库&#xff0c;回测以及量化交易的好帮手 但没有等比复权的&#xff0c;不用。 import efinance as ef ef.stock.get_quote_history(510880,fqt2)

【考前预习】3.计算机网络—数据链路层

往期推荐 【考前预习】2.计算机网络—物理层-CSDN博客 【考前预习】1.计算机网络概述-CSDN博客 浅谈云原生--微服务、CICD、Serverless、服务网格_云原生cicd-CSDN博客 子网掩码、网络地址、广播地址、子网划分及计算_子网广播地址-CSDN博客 浅学React和JSX-CSDN博客 目录 1.数…

Microsemi Libero SoC免费许可证申请指南(Microchip官网2024最新方法)

点击如下链接&#xff1a; https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/fpga/licensing 点击右侧&#xff0c;请求免费的License 如果提示登录&#xff0c;请先登录Microchip账号。 点击Request Free License。 选项一年免费的Li…

嵌入式Linux应用层开发——调试专篇(关于使用GDB调试远程下位机开发板的应用层程序办法 + VSCode更好的界面调试体验提升)

环境预备——调试 虽说有正点原子的代码带着&#xff0c;但是&#xff0c;如果我们只是打着printf这种方式进行手动的检查代码错误&#xff0c;还是不太方便的&#xff0c;笔者这里整理了两个上位机调试路线。 路线1&#xff1a;使用GCC7.5&#xff0c;这个路线比较保守&#…

深度学习训练参数之学习率介绍

学习率 1. 什么是学习率 学习率是训练神经网络的重要超参数之一&#xff0c;它代表在每一次迭代中梯度向损失函数最优解移动的步长&#xff0c;通常用 η \eta η 表示。它的大小决定网络学习速度的快慢。在网络训练过程中&#xff0c;模型通过样本数据给出预测值&#xff0…

蒙特卡洛模拟(Monte Carlo Simulation)详解

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 历史背景 蒙特卡洛模拟的名称来源于摩纳哥的蒙特卡洛赌场&#xff0c;因其依赖于随机性和概率&#xff0c;与赌博中的随机过程有相似之处。该方法的雏形可以追溯到20世纪40年代&#xff0c;二战期…

Git-分支(branch)常用命令

分支 我们在做项目开发的时候&#xff0c;无论是软件项目还是其他机械工程项目&#xff0c;我们为了提高效率以及合理的节省时间等等原因&#xff0c;现在都不再是线性进行&#xff0c;而是将一个项目抽离出诸进行线&#xff0c;每一条线在git中我们就叫做分支&#xff0c;bran…

《数据结构之美-- 单链表》

引言&#xff1a; 首先由上次我们实现的顺序表聊起&#xff0c;我们在实现顺序表的时候会发现&#xff0c;在每次插入数据时当空间不够时就会涉及到扩容&#xff0c;而顺序表的扩容一般都是呈二倍的形式来进行&#xff0c;因此这就有可能造成空间的浪费&#xff0c;那该如何解…

NVR小程序接入平台/设备EasyNVR深度解析H.265与H.264编码视频接入的区别

随着科技的飞速发展和社会的不断进步&#xff0c;视频压缩编码技术已经成为视频传输和存储中不可或缺的一部分。在众多编码标准中&#xff0c;H.265和H.264是最为重要的两种。今天我们来将深入分析H.265与H.264编码的区别。 一、H.265与H.264编码的区别 1、比特率与分辨率 H.…

JPG 转 PDF:免费好用的在线图片转 PDF 工具

JPG 转 PDF&#xff1a;免费好用的在线图片转 PDF 工具 在日常工作和生活中&#xff0c;我们经常需要将图片转换为 PDF 格式。无论是制作电子文档、准备演示材料&#xff0c;还是整理照片集&#xff0c;将图片转换为 PDF 都是一个常见的需求。今天为大家介绍一款完全免费、无需…

RabbitMQ 整合 SpringBoot

概述 大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力、流量削峰消息服务中两个重要概念: 消息代理(`message broker`)和目的地(`destination`) 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。消息队列主要有两种形…

Docker的初识

目录 1. 容器技术发展史1.1 Jail 时代1.2 云时代1.3 云原生时代1.3.1 Google & Docker 竞争1.3.2 k8s 成为云原生事实标准 2. 虚拟化和容器化的概念2.1 什么是虚拟化、容器化2.2 为什么要虚拟化、容器化&#xff1f;2.3 虚拟化实现方式2.3.1 应用程序执行环境分层2.3.2 虚拟…

MySQL 索引解析:让查询速度飙升

1.前言 之前几篇文章&#xff0c;小编和大家分享了mysql innodb的内存结构&#xff0c;这次小编准备用两篇文章来和大家分享下mysql innodb的索引: mysql的基础知识 和 基于索引的sql优化 。 2. 什么是索引&#xff1f; 定义&#xff1a;索引是数据库中用于快速查找数据的机…

记录 idea 启动 tomcat 控制台输出乱码问题解决

文章目录 问题现象解决排查过程1. **检查 idea 编码设置**2. **检查 tomcat 配置**3.检查 idea 配置文件4.在 Help 菜单栏中&#xff0c;修改Custom VM Options完成后保存&#xff0c;并重启 idea 问题现象 运行 tomcat 后&#xff0c;控制台输出乱码 解决排查过程 1. 检查 id…

MySQL有哪些高可用方案?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL有哪些高可用方案?】面试题。希望对大家有帮助&#xff1b; MySQL有哪些高可用方案? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 高可用方案旨在确保数据库系统的高可靠性、低宕机时间、以及在硬件故障…

基于STM32的火灾烟雾报警器设计开题报告

开题报告 题目&#xff1a;基于STM32的火灾烟雾报警器Proteus仿真设计 一、研究背景与意义 随着现代城市化进程的加快&#xff0c;火灾安全问题日益凸显&#xff0c;火灾的早期预警对于减少人员伤亡和财产损失至关重要。传统的火灾报警系统往往依赖于烟雾或温度的单一检测&a…

《机器学习》3.7-4.3end if 启发式 uci数据集klda方法——非线性可分的分类器

目录 uci数据集 klda方法——非线性可分的分类器 计算 步骤 1: 选择核函数 步骤 2: 计算核矩阵 步骤 4: 解广义特征值问题 と支持向量机&#xff08;svm&#xff09; 目标&#xff1a; 方法&#xff1a; 核技巧的应用&#xff1a; 区别&#xff1a; 使用 OvR MvM 将…

【蓝桥杯选拔赛真题93】Scratch青蛙过河 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 Scratch青蛙过河 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 Scratc…

基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 多图推理

基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 多图推理 flyfish 基于Qwen2-VL模型针对LaTeX_OCR任务进行微调训练_-_LoRA配置如何写 基于Qwen2-VL模型针对LaTeX_OCR任务进行微调训练_-_单图推理 基于Qwen2-VL模型针对LaTeX_OCR任务进行微调训练_-_原模型_单图推理 基于Q…