公司最近的项目有个添加动态表单的需求,总结一下我在表单验证上遇到的一些坑。

如图是功能的需求,这个功能挺好实现的,但是表单验证真是耗费了我一些功夫。

vue+element在表单验证上有一些限制,必须依照element示例的格式才能验证通过。

附上代码:

 <el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic">
<div v-for="(domain, index) in dynamicValidateForm.list">
<el-form-item label="" style="margin-left: -70px">
<el-select v-model="dynamicValidateForm.list[index].organizer.positionId" @change="Positon($event)">
<el-option
v-for="item in positionList"
:key="item.id"
:label="item.name"
:value="item.id"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
<el-form-item style="margin-left: -29px"
label="人数"
:prop="'list.' + index + '.organizer.number'"
17 :rules="{required: true, message: '请输入人数', trigger: 'blur'}"
>
<el-input v-model="domain.organizer.number" placeholder="人数"></el-input>
</el-form-item>
<el-form-item label="直属下级" v-if="dynamicValidateForm.list[index].organizer.positionId!==1">
<el-select v-model="dynamicValidateForm.list[index].organizer.parentId">
<el-option
v-for="item in positionList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<span style="margin-left: 30px">任务</span>
<span v-for="(itm,i) in dynamicValidateForm.list[index].dutyId" :key="i">
<el-form-item label="" style="width: 100px;" id="ren"
:prop="'list.' + index + '.dutyId.'+i+'.dutyid'"
34 :rules="{required: true, message: '请选择任务', trigger: 'change'}"
>
<el-select v-model="dynamicValidateForm.list[index].dutyId[i].dutyid">
<el-option
v-for="item in dutyList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</span>
<span class="add" @click="addWork(index)">增加任务+</span>
</div>
<p class="addLevel" @click="addLevel()">+增加职位</p>
</el-form>

我加粗并且是紫色的地方需要着重注意。:prop和:rulues还有v-model里面的字段必须是一一对应的,不然会一直验证不通过,这是验证最关键的

我害怕验证不通过,选择在行内验证

  dynamicValidateForm:{         //必须将数组放到表单对象里,不然会报错
list:[
{
organizer: {
positionId:'',
parentId:'',
number:'',
},
dutyId:[
{
dutyid:''
}
]
}
],
},

还有注意的一些验证规则:

  bus: [
{required: true, message: '请填写公交站点', trigger: 'blur'},
{ min: 1, max: 50, message: '50个字符以内', trigger: 'blur'} //这种验证必须是内容必须是字符串才能通过,不然一直会提示50个字符以内
], //如果必须填写数字,可以这样改
bus: [
{required: true, message: '请填写公交站点', trigger: 'blur'},
 {pattern:/^\d{1,50}$/, message: '50个字符以内', trigger: 'blur'}  //正则转换成数字
],

vue+element 动态表单验证的更多相关文章

  1. vue踩坑:vue+ element ui 表单验证有值但验证失败。

    一.如图:有值但是验证失败 二. <el-form :model="form" :rules="rules"> <el-form-item l ...

  2. 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

        方法使用前需了解: 来自”和“小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查该form上添加 ...

  3. ElementUI表单验证攻略:解决表单项启用和禁用验证的切换,以及动态表单验证的综合性问题

    试想一种比较复杂的业务场景: 表格(el-table)的每一行数据的第一列是勾选框,最后一列是输入框.当某一行的勾选框勾上时,启用该行的输入框,并开启该行输入框的表单验证:取消该行的勾选框,则禁用该行 ...

  4. vue validate多表单验证思考 之前写过一个里外层,现在觉得不合适,应该平行的写,然后都给ret,最后判断ret 再做出反应,这样整体表单的所有验证就都报验证,然后最后提交的时候把组件内的对象合并到总的对象,再提交

    vue validate多表单验证思考 之前写过一个里外层,现在觉得不合适,应该平行的写,然后都给ret,最后判断ret 再做出反应,这样整体表单的所有验证就都报验证,然后最后提交的时候把组件内的对象 ...

  5. Vue Element Form表单时间验证控件使用

    如果直接使用Element做时间选择器,其规则(rules)不添加type:'date',会提示类型错误,处理这个需要规范值的类型为date. 时间格式化过滤器 import Vue from 'vu ...

  6. 如何在Vue的项目里对element的表单验证进行封装

    介绍需求 熟悉并优化公司项目的第五天,领导说能不能把表单验证封装一下,我打开代码一看 由于是后台管理系统,无数个需要验证的输入框,由于截图长度受限,只能展示部分,类似于这种页面还有无数个!代码重复率非 ...

  7. vue elementui form表单验证

    最近我们公司将前端框架由easyui 改为 vue+elementui .自学vue两周 就开始了爬坑之路.业余时间给大家分享一下心得,技术新手加上第一次分享(小激动),有什么不足的地方欢迎大家指正, ...

  8. element自定义表单验证

    element-ui框架下修改密码弹窗进行表单验证. 除了基础校验,密码不为空,长度不小于6字符,需求中还需校验密码由数字和字母组合. 处理代码如下: <el-dialog :visible.s ...

  9. vue 常用的表单验证,包括手机号码,固定电话和身份证...

    <template> <div> <pl-content-box> <pl-page-nav :show-previous=true></pl-p ...

随机推荐

  1. 实现简易JDBC框架

    1 准备 JDBC 基本知识 JDBC元数据知识 反射基本知识 2:  两个问题 业务背景:系统中所有实体对象都涉及到基本的CRUD操作.所有实体的CUD操作代码基本相同,仅仅是发送给数据库的sql语 ...

  2. PHP框架 fastadmin 根据条件判断字段的显示隐藏

    首先,因为fastadmin的JS里面字段不支持function函数  里面只能填false或true,不能动态判断显示隐藏, 后面通过看文档发现能在表格初始化的地方判断  如图,就可以实现根据lin ...

  3. 一次业务网关用ASP.NET Core 2.1重构的小结

    目录 前言 统一鉴权 服务限流 路由转发 参数重组 链路跟踪 熔断降级 服务计次 业务指标监控 日志记录 迭代更新 总结 前言 对于API网关,业界貌似对它进行下划分,有下面几个分类/场景. 面向We ...

  4. 压缩json的一些方式

    有时候系统之间的交互需要传递报文,但是报文的量有时候是巨大的,会占用很大的贷款, 或者有时候是通过加密进行传递比如:RSA非对称加密,如果这样的话,解密方就会花费很多的时间进行解密.因为RSA加密安全 ...

  5. java高并发系列 - 第5天:深入理解进程和线程

    进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.程序是指令.数据及其组织形式的描述,进程是程序的实体. 进程具有的 ...

  6. 20个Python代码段,你需要立刻学会,好用到哭!

    Python是一种非BS编程语言.设计简单和易读性是它广受欢迎的两大原因.正如Python的宗旨:美丽胜于丑陋,显式胜于隐式. 记住一些帮助提高编码设计的常用小诀窍是有用的.在必要时刻,这些小诀窍能够 ...

  7. 初识Lock与AbstractQueuedSynchronizer(AQS)

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  8. Python爬取620首虾米歌曲,揭秘五月天为什么狂吸粉?!

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: CDA数据分析师 PS:如有需要Python学习资料的小伙伴可以加点 ...

  9. tinyriscv---一个从零开始写的极简、易懂的开源RISC-V处理器核

    本项目实现的是一个微riscv处理器核(tinyriscv),用verilog语言编写,只求以最简单.最通俗易懂的方式实现riscv指令的功能,因此没有特意去对代码做任何的优化,因此你会看到里面写的代 ...

  10. Linux下 vim代码编译器的使用

    首先在命令行模式下输入代码: vim ok.c 创建c文件 如果发现vim没有被安装的话,输入以下代码对vim进行安装: sudo apt install vim 安装完毕之后再输入第一行代码,之后进 ...