vue:element-ui表单动态验证规则

一、需求:

实现当是否发送消息选择是时,业务类型字段必填。

二、实现:

当你在一个表单中使用 el-formel-form-item 来创建表单项时,el-form-item:rules 属性可以用来设置该表单项的验证规则。我们希望根据用户在 "是否发送消息" 这个表单项中的选择动态设置 "业务类型" 这个表单项的验证规则。

在 Vue 中,你可以使用绑定的方式 :rules 动态设置验证规则。这意味着你可以在 :rules 属性中绑定一个变量,然后根据这个变量的值来动态设置验证规则。

在代码中,通过以下几步来实现这个动态验证规则的功能:

  1. 在模板中:

    • 在 "是否发送消息" 这个表单项(el-form-item)中,我们使用 v-model 来绑定用户的选择到 form.ifSendMessage 属性。
    • 在 "业务类型" 这个表单项的 :rules 属性中,我们使用三元运算符 form.ifSendMessage === 1 ? rules.sendAppList : [] 来判断如果 "是否发送消息" 选择为是(值为 1),则应用 rules.sendAppList 规则,否则应用空数组 []
  2. rules 中:

    • rules 中,我们为 "是否发送消息" 这个表单项设置了基本的验证规则,确保用户进行选择。
    • 在 "业务类型" 这个表单项的验证规则中,我们使用了自定义验证函数。如果用户选择了是(form.ifSendMessage === 1),我们检查是否选择了业务类型,如果没有选择,则返回一个错误,否则返回验证通过。

这样,当用户选择是发送消息时,业务类型字段就会被要求必填,否则不会被要求必填。

1)关于validator

validator是element表单提供的一个rules验证事件

在 Element UI 表单组件中,validator 是用于自定义验证规则的一个事件。当使用 :rules 属性指定验证规则时,可以通过 validator 选项来提供一个自定义的验证函数。

在代码中,我们使用了自定义验证函数来判断 "业务类型" 字段的验证规则。具体来说,我们在 rules 中为 sendAppList 字段的验证规则提供了一个包含 validator 选项的对象:

sendAppList: [
  {
    required: true,
    message: '请选择业务类型',
    trigger: 'change',
    validator: (rule, value, callback) => {
      if (form.ifSendMessage === 1 && (!value || value.length === 0)) {
        callback(new Error('请选择业务类型'));
      } else {
        callback();
      }
    },
  },
],

这里,validator 是一个函数,接收三个参数:rulevaluecallback。在这个函数中,我们根据 "是否发送消息" 字段的值(form.ifSendMessage)来判断是否需要进行验证。如果用户选择发送消息(form.ifSendMessage === 1)且业务类型字段没有选择任何值,则调用 callback 函数返回一个错误。否则,调用 callback 表示验证通过

这种方式允许你根据不同的场景自定义验证逻辑,从而实现更灵活的表单验证。

2)为什么应用空数组 []

在 Element UI 表单组件中,rules 属性用于设置表单项的验证规则。当你在 :rules 中设置验证规则时,你可以为每个表单项指定一个验证规则数组。这个数组中的每个元素都是一个规则对象,用于描述该表单项的验证条件。

在上述代码中,我们为 sendAppList 字段设置的验证规则如下:

sendAppList: [
  {
    required: true,
    message: '请选择业务类型',
    trigger: 'change',
    validator: (rule, value, callback) => {
      if (form.ifSendMessage === 1 && (!value || value.length === 0)) {
        callback(new Error('请选择业务类型'));
      } else {
        callback();
      }
    },
  },
],

在这个验证规则中,我们使用了 validator 选项指定了一个自定义的验证函数。在这个函数中,我们通过判断 form.ifSendMessage 的值,决定是否执行验证逻辑。如果 form.ifSendMessage 的值为 1(即用户选择了“是”发送消息),并且 value(业务类型字段的值)为空或长度为 0,则执行 callback(new Error('请选择业务类型')) 表示验证失败,否则执行 callback() 表示验证通过。

当用户选择“否”发送消息时,我们不需要对业务类型字段进行额外的验证,因此为了确保不执行多余的验证逻辑,我们将验证规则设置为空数组 []

这样就确保了在用户选择“否”发送消息时,不会执行业务类型字段的验证逻辑,达到动态设置验证规则的目的。

3)代码:

<el-form-item label="是否发送消息:" prop="ifSendMessage">
  <el-radio-group v-model="form.ifSendMessage">
    <el-radio :label="1">是</el-radio>
    <el-radio :label="0">否</el-radio>
  </el-radio-group>
</el-form-item>
<el-form-item label="业务类型:" prop="sendAppList">
  <!-- 业务类型字段的内容 -->
  <el-select
    v-model="form.sendAppList"
    multiple
    filterable
    clearable
    collapse-tags
    style="width: 100%"
    placeholder="请选择"
    :rules="form.ifSendMessage === 1 ? rules.sendAppList : []"
  >
    <el-option
      v-for="item in appList"
      :key="item.itemCode"
      :label="item.itemName"
      :value="item.itemCode"
    >
    </el-option>
  </el-select>
</el-form-item>


rules: {
  // 其他规则...
  ifSendMessage: [
    { required: true, message: '请选择', trigger: 'change' },
  ],
  sendAppList: [
    {
      required: true,
      message: '请选择业务类型',
      trigger: 'change',
      validator: (rule, value, callback) => {
        if (form.ifSendMessage === 1 && (!value || value.length === 0)) {
          callback(new Error('请选择业务类型'));
        } else {
          callback();
        }
      },
    },
  ],
},

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

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

相关文章

前端JS加密与Buspsuite的坦诚相待

前端JS加密测试场景下的困惑 在渗透测试过程中经常会遇到JS前端加密的场景&#xff0c;假如不借助任何工具的情况下&#xff0c;我们一般是把JS代码进行扣取&#xff0c;本地进行加解密生成Payload&#xff0c;然后在Burpsuite里进行Payload替换。这种方式就存在一个很明显的问…

机器学习:什么是监督学习和无监督学习

目录 一、监督学习 &#xff08;一&#xff09;回归 &#xff08;二&#xff09;分类 二、无监督学习 聚类 一、监督学习 介绍&#xff1a;监督学习是指学习输入到输出&#xff08;x->y&#xff09;映射的机器学习算法&#xff0c;监督即理解为&#xff1a;已知正确答案…

【Web前端开发基础】CSS的定位和装饰

CSS的定位和装饰 目录 CSS的定位和装饰一、学习目标二、文章内容2.1 定位2.1.1 定位的基本介绍2.1.2 定位的基本使用2.1.3 静态定位2.1.4 相对定位2.1.5 绝对定位2.1.6 子绝父相2.1.7 固定定位2.1.8元素的层级关系 2.2 装饰2.2.1 垂直对齐方式2.2.2 光标类型2.2.3 边框圆角2.2.…

Keepalived + Nginx双主架构

Keepalived Nginx双主架构 环境准备&#xff1a; keepalived_master1服务器nginx&#xff1a;172.20.26.167 keepalived_master2服务器nginx&#xff1a;172.20.26.198 各服务器关闭selinux、防火墙等服务。 开机安装部署nginx 在172.20.26.167服务器上 yum install ngi…

基于ADAS的车道线检测算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 图像预处理 4.2 车道线特征提取 4.3 车道线跟踪 5.完整工程文件 1.课题概述 基于ADAS的车道线检测算法,通过hough变换和边缘检测方法提取视频样板中的车道线&#xff0c;然后根据车道线的弯曲情况…

在Excel中批量添加前后缀的三种方法,总有一种适合 你

你可以使用高级Excel函数将前缀和后缀快速应用于列。在使用大型电子表格时,为每个单元格添加后缀或前缀可能会花费很长时间,并使你疲惫不堪。 在这里,你可以通过几种快速简单的方式添加后缀或前缀,从而减少所需的手动操作。​我们将通过三种不同的方法向Excel电子表格添加…

互联网盲盒小程序,解锁了盲盒全新模式!

随着潮流玩具的兴起&#xff0c;盲盒因此产生&#xff0c;在时间的推移下&#xff0c;盲盒的发展正处于鼎盛时期。在今年&#xff0c;盲盒市场也将迎来300亿元的市场规模&#xff0c;而盲盒的受众群体也在收入能力较高的年轻人中。 盲盒具有独特的购买方式&#xff0c;它能够让…

硬件监测和系统诊断 -- TechTool Pro 18 中文

TechTool Pro 18是一款功能强大的硬件和软件诊断工具&#xff0c;它提供了多种功能来帮助用户维护和优化Mac电脑的性能。这些功能包括&#xff1a;硬盘检测和修复、内存测试、驱动器克隆、数据恢复、网络和连接测试、系统健康检查以及定期维护等。 TechTool Pro 18还具有直观的…

k8s--helm

什么是helm&#xff1f;在没有这个helm之前&#xff0c;deployment service ingress helm的作用 通过打包的方式&#xff0c;把deployment service ingress等打包在一块&#xff0c;一键式的部署服务&#xff0c;类似yum安装 官方提供的一个类似与安装仓库额功能&#xff0c;…

写着玩的程序:pycharm实现无限弹窗程序(非病毒程序,仅整蛊使用)

运行环境 PyCharm 2023.2.1 python3.11 具体内容 源代码 import tkinter as tk from tkinter import messagebox import threadingclass PopupGenerator:def __init__(self):self.root tk.Tk()self.root.geometry("200x120")self.root.title("无限弹窗&qu…

C# CefSharp 根据输入日期段自动选择日期

1&#xff0c;前言 搞这个Demo整整搞几天通宵&#xff0c;爆肝了。后做的效果出来&#xff0c;还是不错的。给小伙伴看看效果图。 2, 遇到的问题 日期之间相差多少个月数。开始时间框点击对应月份要点击多少次&#xff0c;结束时间框点击对应月份要点击多少次Xpath获取问题。…

理解LSTM一种递归神经网络(RNN)

1 递归神经网络结构 一个简单的传统神经网络结构如下图所示&#xff1a; 给他一些输入x0,x1,x2 … xt, 经过神经元作用之后得到一些对应的输出h0,h1,h2 … ht。每次的训练&#xff0c;神经元和神经元之间不需要传递任何信息。 递归神经网络和传统神经网络不同的一个点在于&am…

智能配电监控系统

摘要&#xff1a;利用微机综合保护测控装置 、控制单元、电力监测仪 、摄像机 &#xff0c;设计开发出一套智能配电远程监控系统 &#xff0c;实现配电室的无人值守 &#xff0c;从而提高变配电运行现代化管理水平。 关键词&#xff1a;智能配电&#xff1b;现场监控&#xff…

IMX6ULL|GPIO子系统

一.GPIO子系统 GPIO是General Purpose I/O的缩写&#xff0c;即通用输入输出端口&#xff0c;简单来说就是MCU/CPU可控制的引脚&#xff0c;这些引脚通常有多种功能&#xff0c;最基本的是高低电平输入检测和输出&#xff0c;部分引脚还会与主控器的片上外设绑定&#xff0c;如…

性能篇:解密Stream,提升集合遍历效率的秘诀!

大家好&#xff0c;我是小米&#xff0c;一个热爱技术分享的小伙伴。今天我们来聊一聊 Java 中的 Stream&#xff0c;以及如何通过 Stream 来提高遍历集合的效率。 什么是Stream&#xff1f; 在开始深入讨论之前&#xff0c;我们先来了解一下什么是 Stream。 Stream 是 Java…

微信如何批量自动加好友?用它就对了!

你还在手动逐一输入号码&#xff0c;再搜索添加好友吗&#xff1f;这样实在是太麻烦了&#xff0c;还很费时间&#xff0c;稍不注意就会出错。不妨试试这个微信批量自动添加好友工具&#xff0c;解放双手&#xff0c;提高加人效率&#xff01; 下面一起来看看如何操作吧&#…

(十一)Head first design patterns状态模式(c++)

状态模式 如何去描述状态机&#xff1f; 假设你需要实例化一台电梯&#xff0c;并模仿出电梯的四个状态&#xff1a;开启、关闭、运行、停止。也许你会这么写 class ILift{ public:virtual void open(){}virtual void close(){}virtual void run(){}virtual void stop(){} }…

机器学习实验1——朴素贝叶斯和逻辑回归分类Adult数据集

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;数据预处理&#x1f9e1;&#x1f9e1;认识数据填充缺失值&#xff08;“ &#xff1f;”&#xff09;将income属性替换为0-1变量筛除无效属性编码和缩放 &#x1f9e1;&…

GC6208 5V摄像机镜头驱动芯片,为什么可以替代AN41908,适用于摄像机镜头上

GC6208是一个镜头电机驱动IC摄像机和安全摄像机。该装置集成了一个由PID控制的可变光圈直流电机驱动器和两个通道的扫描隧道显微镜电机驱动器&#xff0c;用于变焦和聚焦控制。AN41908A是一款用于摄像机和安全摄像机的镜头马达驱动IC&#xff0c;具有lris控制功能。电压驱动系统…

基于springboot+vue新能源汽车充电管理系统

摘要 新能源汽车充电管理系统是基于Spring Boot和Vue.js技术栈构建的一款先进而高效的系统&#xff0c;旨在满足不断增长的新能源汽车市场对充电服务的需求。该系统通过整合前后端技术&#xff0c;实现了用户注册、充电桩管理、充电订单管理等核心功能&#xff0c;为用户提供便…