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

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

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. Java泛型类型擦除与运行时类型获取

    Java的泛型大家都知道是类型擦除的方式实现的,“编译器会进行泛型擦除”是一个常识了(实际擦除的是参数和自变量的类型).“类型擦除” 并非像许多开发者认为的那样,在 <..> 符号内的东西 ...

  2. python基础(32):进程(二)

    1. multiprocess模块 仔细说来,multiprocess不是一个模块而是python中一个操作.管理进程的包. 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含 ...

  3. javafx笔记----非javafx线程Platform.runLater赋值不生效情况

    Platform.runLater(() -> { // }); Platform.runLater一些情况下没有赋值到fx页面上 采用task方式 Task<SB> task = ...

  4. 用AI思维给成本降温,腾讯WeTest兼容性测试直击底价!

    WeTest 导读 当AI成为各行业提高产业效率的动能,很多人开始疑惑,这架智能化的“无人机”何时在移动应用测试中真正落地?在今年的国际数码互动娱乐博览会(ChinaJoy)上,腾讯WeTest给出了 ...

  5. echarts地图map城市间如何连线

    let bjData = [ [{name:'北京'}, {name:'上海',value:95}], [{name:'北京'}, {name:'广州',value:90}]]; let conver ...

  6. 使用JS通过Web API执行批量操作,多个操作是一个事务!

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复235或者20161105可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  7. vue 地图可视化 maptalks 篇

    Maptalks 项目是一个 HTML5 的地图引擎, 基于原生 ES6 Javascript 开发: - 二三维一体化地图, 通过二维地图的旋转 /倾斜增加三维视角 - 插件化设计, 能与其他图形库 ...

  8. iOS中进程与线程(多线程、主次线程)

    一.什么是线程?什么是多线程?              线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B.为了同时执行两个任务,产生了多线程. 例子: 打开一个音乐软件,用户开辟一个线程A ...

  9. Smobiler针对百度文字识别SDK动态编译与运行

    下载百度ocr 在百度ocr平台下载android资源文档 文档地址:https://ai.baidu.com/docs#/OCR-Android-SDK/top sdk下载地址:http://ai. ...

  10. Java web实现原理

    说明 最近在看一本java web和tomcat技术介绍的书籍.故此,希望通过文字总结的方式总结自己学习所获,本篇主要介绍java实现web基本的信息浏览的方法原理. web的本质 由于技术能力有限, ...