el-form表单在循环里如何写rules表单校验,解决办法

2024-08-23 10:04

本文主要是介绍el-form表单在循环里如何写rules表单校验,解决办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

el-form表单在循环里如何写rules表单校验,解决办法

在日常开发中我们经常可以遇到 在form中 循环嵌套多个的情况 比如点击加减新增删除 并且还需要校验表单如何写呢?

实现办法

1.html (举例)

contractFeesForm 为总数据源 <el-form :model="contractFeesForm" ref="contractFeesFormRef" :rules>这里的rules需动态生成
<div v-for="(contractItem, contractIndex) in contractFeesForm.payment"><el-divider></el-divider><el-row :gutter="24"><el-col :span="8">这里 我们既然是在循环内 在每个item上绑定的 prop 就不能是固定写死的 不然没办法进行表单校验 就需要写成 xxxx[0,1,2......].属性值这样的 index 为动态的<el-form-item :prop="`payment[${contractIndex}].payment_type`" label="名称"><el-selectv-model="contractItem.payment_type"filterableclearableplaceholder="请选择"><el-option v-for="v in paymentList" :label="v.name" :value="v.id" /></el-select></el-form-item></el-col><el-col :span="8">这个地方也同理 对应该el-select的数据源<el-form-item :prop="`payment[${contractIndex}].payment_unit`" label="名称"><el-select v-model="contractItem.payment_unit" filterable clearable placeholder="请选择"><el-option v-for="v in paymentunitList" :label="v.name" :value="v.id" /></el-select></el-form-item></el-col><el-col :span="8">这个地方也同理 对一个该el-select的数据源<el-form-item :prop="`payment[${contractIndex}].payment_mode`" label="名称"><el-select v-model="contractItem.payment_mode" filterable clearable placeholder="请选择"><el-option v-for="v in paymentmodeList" :label="v.name" :value="v.id" /></el-select></el-form-item></el-col></el-row></div>

2.js

// 动态生成校验规则
const rules = ref()
//rules方法封装
const generateFieldRules = (fields: string[], message: string) => {
//fields 为 payment[1,2,3...].xxx
//message 为 提示校验的内容return fields.reduce((acc, field) => {acc[field] = [{ required: true, message, trigger: 'blur' }]return acc},{} as Record<string, any>)
}
const updateRules = () => {const newRules: Record<string, any> = {}//我们获取payment这个数组并进行forEach 循环 主要是获取 index 和 字段名拼接contractFeesForm.value.payment.forEach((_, index) => {const paymentFields = [ // 这里的字段就是需要校验的字段'payment_type','payment_unit','payment_mode'... ]//使用Object.assign进行对象拼接拷贝Object.assign(newRules,//在这里调用上面封装好的rules方法将对应的 field 和 index 拼接进去generateFieldRules(paymentFields.map((field) => `payment[${index}].${field}`),'请输入'))})//校验赋值rules.value = { ...newRules }
}
// 初始更新校验规则
updateRules()

3,然后我们在确认校验操作逻辑里

const contractFeesFormRef = ref<FormInstance | null>(null)
contractFeesFormRef.value.validate(async (valid: boolean) => {if (valid) { .... // 即可

这篇关于el-form表单在循环里如何写rules表单校验,解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099074

相关文章

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

JAVA中while循环的使用与注意事项

《JAVA中while循环的使用与注意事项》:本文主要介绍while循环在编程中的应用,包括其基本结构、语句示例、适用场景以及注意事项,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录while循环1. 什么是while循环2. while循环的语句3.while循环的适用场景以及优势4. 注意

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

spring 参数校验Validation示例详解

《spring参数校验Validation示例详解》Spring提供了Validation工具类来实现对客户端传来的请求参数的有效校验,本文给大家介绍spring参数校验Validation示例详... 目录前言一、Validation常见的校验注解二、Validation的简单应用三、分组校验四、自定义校

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

form表单提交编码的问题

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded; charset=UTF-8        那么我们如果需要修改编码,不使用默认的,那么可以如下这样操作修改编码,来满足需求: hmtl代码:   <meta http-equiv="Conte

Solr 使用Facet分组过程中与分词的矛盾解决办法

对于一般查询而言  ,  分词和存储都是必要的  .  比如  CPU  类型  ”Intel  酷睿  2  双核  P7570”,  拆分成  ”Intel”,”  酷睿  ”,”P7570”  这样一些关键字并分别索引  ,  可能提供更好的搜索体验  .  但是如果将  CPU  作为 Facet  字段  ,  最好不进行分词  .  这样就造成了矛盾  ,  解决方法