位置: IT常识 - 正文

element-ui动态表单和验证(elementui动态表单数据回显)

编辑:rootadmin
element-ui动态表单和验证

推荐整理分享element-ui动态表单和验证(elementui动态表单数据回显),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:elementui动态表单数据回显,elementui动态表单数据回显,elementui动态表格合并,elementui动态表单组件,elementui动态表格合并,elementui动态表单,elementui动态表单数据回显,elementui动态表单,内容如对您有帮助,希望把文章链接给更多的朋友!

在使用element-ui开发中,经常会用到对动态创建的表单进行字段验证,比如新增多个类似卡片的表单,里面的字段需要做验证,此时就要使用到动态表单验证,官方文档写的有示例,但是不够清晰。除了官方示例,还可以使用循环生成多个form实现该需求。

第一种官方示例:一个Form多项element-ui动态表单和验证(elementui动态表单数据回显)

下面以实际项目中的代码为例:

<el-form ref="form" :model="form" :rules="rules" label-width="110px" size="small" style="width: 90%;"> <div v-for="(item, index) in form.list" :key="item.id" class="box-card"> <el-form-item :prop=" 'list.' + index + '.maintUnit'" :rules="rules.maintUnit" label="运维单位"> <SearchOpsDepartment :value.sync="item.maintUnit"></SearchOpsDepartment> </el-form-item> <el-form-item :prop=" 'list.' + index + '.userId'" :rules="rules.userId" label="运维人员"> <SearchUsers :value.sync="item.userId"></SearchUsers> </el-form-item> <div> <el-button type="text" @click="handleAdd">添加</el-button> <el-button v-if="index !== 0" type="text" @click="handleDelete(index)">删除</el-button> </div> </div></el-form><script>data() { return { form: { list: [{ id: Date.now() }] // 这里添加了一个当前时间戳作为循环使用的key,如果使用index作为key,虽然避免的报错,但是对性能没有什么帮助,而且可能增加新能问题。 }, rules: { maintUnit: [ { required: true, message: '运维单位不能为空!', trigger: ['change', 'blur'] } ], userId: [ { required: true, message: '运维人员不能为空!', trigger: ['change', 'blur'] } ] } } }</script>注意重点form表单里的 :model="form" :rules="rules"model和rules不能省略,而且这个model必须是个对象,虽然在当前例子里,我们的数据form其实就是一个数组,但是还要包裹一层成对象。每一项绑定prop时,一定要按照:prop=" 'list.' + index + '.maintUnit'"这种格式,list是需要循环的数组key名,一定不要写成form.list,也不是循环出的每一项item,index是每项的下标,maintUnit是当前字段key值。每一项必须单独绑定验证规则,如例子中的:rules="rules.maintUnit"prop和当前字段的key值要保持一致,无论是动态表单还是静态表单都要保持一致验证规则不能用正则表单验验证时,一定要有默认值。比如form里的input绑定的是v-model="form.value",data里定义form时一定要要加value,如form: { value: '' }第二种:多个form<CardBox v-for="(item, index) in list" :key="index" :title="item.itemName"> <el-form ref="form" :model="item" class="size-auto width-100" :rules="rules" :inline="true" size="medium" label-width="120px"> <el-form-item label="计划工程量" prop="workAmount"> <el-input v-model.trim="item.workAmount" maxlength="15" clearable placeholder="支持小数点后2位" @change="handleComputed(item, index)" /> </el-form-item> <el-form-item label="单价" prop="unitPrice"> <el-input v-model.trim="item.unitPrice" maxlength="50" show-word-limit clearable placeholder="请输入" @change="handleComputed(item, index)" /> </el-form-item> <el-form-item label="计划完成金额" prop="prepareCompletionMoney" :rules="moneyRules(item.budgetContent.budgetMoney)"> <el-input v-model.trim="item.prepareCompletionMoney" disabled maxlength="15" clearable placeholder="支持小数点后2位"> <i slot="suffix" class="el-input__icon input-unit">元</i> </el-input> </el-form-item> <el-form-item label="工作内容及标准"> <el-input v-model.trim="item.content" type="textarea" maxlength="200" show-word-limit clearable placeholder="请输入" /> </el-form-item> <el-form-item label="备注"> <el-input v-model.trim="item.remark" type="textarea" maxlength="200" show-word-limit clearable placeholder="请输入" /> </el-form-item> </el-form></CardBox><script>data() { return { list: [], rules: { workAmount: [{ validator: this.validNum, trigger: 'blur' }], unitPrice: [{ validator: this.validNum, trigger: 'blur' }], adjustmentFactor: [{ validator: this.validNum, trigger: 'blur' }] } } }, methods: { validNum(rule, value, callback) { if (value && !isNumber2(value)) { callback(new Error('填写格式错误')) } else { callback() } }, moneyRules(budgetMoney) { return [{ validator: (rule, value, callback) => this.validMoney(rule, value, callback, budgetMoney), trigger: 'change' }] }, validMoney(rule, value, callback, budgetMoney) { if (value) { if (value > budgetMoney) { callback(new Error('不能大于预算金额')) } else { callback() } } else { callback() } }, // 获取多个form验证结果 handleValidate() { const list = [] const validas = [] this.$refs['form'].forEach((item, index) => { list.push(new Promise(resolve => { item.validate(valida => { validas.push(valida) resolve() }) }) ) }) Promise.all([...list]).then(() => { const res = !validas.some(item => item === false) return res }).catch(() => { return false }) } }</script>复杂表单的验证

很多时候会遇到其中一个值,需要当前项的某个值做验证,如上第二种表单中,要求计划完成金额不能大于预算量,这里有两种实现方式

1、通过 rule.field获取到当前项下标,只适用第一种动态表单;

validEverydayBudgetAmount(rule, value, callback) { if (value) { if (!isNumber2(value)) { callback(new Error('填写格式错误')) return } // rule.field转为数组后第二个就是下标 const index = rule.field.split('.')[1] const budgetAmount = this.everydayCost[index].budgetAmount if (value > budgetAmount) { callback(new Error(`不能大于总预算量${budgetAmount}`)) } else { callback() } } else { callback() }},

2、把验证规则写在item行内,这样就可以通过传参获取当前项值;

<el-form-item label="计划完成金额" prop="prepareCompletionMoney" :rules="moneyRules(item.budgetContent.budgetMoney)">// 验证规则见第二种表单的示例代码获取验证结果

第二种多个form的,验证结果获取较为麻烦,因为每个验证都是异步,这里使用promise方式获取。父组件获取验证结果时,调用子组件内handleValidate方法,通过then或者await获取结果即可。

// 获取多个form验证结果,具体参考第二种form代码handleValidate() { const list = [] const validas = [] this.$refs['form'].forEach((item, index) => { // 把单个验证结果处理为promise函数,然后添加到list中 list.push(new Promise(resolve => { item.validate(valida => { validas.push(valida) resolve() }) }) ) }) // 通过Promise.all等待几个验证都完成再处理 return Promise.all([...list]).then(() => { const res = !validas.some(item => item === false) return res }).catch(() => { return false })}
本文链接地址:https://www.jiuchutong.com/zhishi/299219.html 转载请保留说明!

上一篇:一分钟玩转Stable Diffusion(一分钟玩转钉钉文档是什么东西)

下一篇:【Pytorch深度学习50篇】·······第六篇:【常见损失函数篇】-----BCELoss及其变种

  • 让客户主动找到你 信任你,我们该如何做营销推广?(如何让客户主动找到我买单)

    让客户主动找到你 信任你,我们该如何做营销推广?(如何让客户主动找到我买单)

  • 网易食堂招聘(网易食堂将收费)(网易食堂招聘条件)

    网易食堂招聘(网易食堂将收费)(网易食堂招聘条件)

  • 华为翻译功能怎么打开(华为翻译功能怎么用p30)

    华为翻译功能怎么打开(华为翻译功能怎么用p30)

  • ios15浏览器怎么换回重叠(ios13浏览器怎么保存图片)

    ios15浏览器怎么换回重叠(ios13浏览器怎么保存图片)

  • 网上怎么查询停水通知(网上怎么查询停保时间)

    网上怎么查询停水通知(网上怎么查询停保时间)

  • wifi加密不可上网(wifi加密不可上网是什么原因怎么解决)

    wifi加密不可上网(wifi加密不可上网是什么原因怎么解决)

  • 草图大师自带的材质不见了(草图大师自带的材质库不见了)

    草图大师自带的材质不见了(草图大师自带的材质库不见了)

  • 探探能注销吗(探探能注销吗?)

    探探能注销吗(探探能注销吗?)

  • word的标尺上可以进行什么操作(word中的标尺不可以用)

    word的标尺上可以进行什么操作(word中的标尺不可以用)

  • 苹果11插卡没反应(苹果插卡没反应怎么办)

    苹果11插卡没反应(苹果插卡没反应怎么办)

  • 为什么qq改密码了还是能被别人登录(为什么qq改密码qq音乐还能登录)

    为什么qq改密码了还是能被别人登录(为什么qq改密码qq音乐还能登录)

  • 如何创建微信视频号(如何创建微信视屏号)

    如何创建微信视频号(如何创建微信视屏号)

  • 结构化方法的基本思路(结构化方法的基本思想是什么?它具有什么样的特征?)

    结构化方法的基本思路(结构化方法的基本思想是什么?它具有什么样的特征?)

  • 摄像头内存卡插电脑怎么看(摄像头内存卡插反了取不出来怎么办)

    摄像头内存卡插电脑怎么看(摄像头内存卡插反了取不出来怎么办)

  • 拼多多我的评价在哪里(拼多多我的评价怎么删除不了)

    拼多多我的评价在哪里(拼多多我的评价怎么删除不了)

  • 抖音里的设置在哪(抖音里的设置在那个地方视频看)

    抖音里的设置在哪(抖音里的设置在那个地方视频看)

  • qq小表情包小人在哪里(qq小人图表情)

    qq小表情包小人在哪里(qq小人图表情)

  • 华为p30有来电闪光吗(华为p30有来电闪光功能吗)

    华为p30有来电闪光吗(华为p30有来电闪光功能吗)

  • 闲鱼怎么下载电脑版(闲鱼网怎么下载电脑app)

    闲鱼怎么下载电脑版(闲鱼网怎么下载电脑app)

  • 电脑记事本在哪个文件夹(电脑记事本在哪里打开)

    电脑记事本在哪个文件夹(电脑记事本在哪里打开)

  • 要点初见:开源AI绘画工具Stable Diffusion代码分析(文本转图像)、论文介绍(上)(开源原则)

    要点初见:开源AI绘画工具Stable Diffusion代码分析(文本转图像)、论文介绍(上)(开源原则)

  • 项目异地预缴附加税会计分录是?
  • 餐饮毛利率多少是赚钱的
  • 服装公司的吊牌是什么
  • 核算会计科目职工薪酬的范围
  • 哪些支出允许在企业所得税前扣除
  • 房子已买
  • 专用发票跨年度能入账吗
  • 承兑汇票私人贴现账务怎么处理
  • 企业财务会计制度范本
  • 周年庆典布置现场
  • 工资做账原始凭证是什么
  • 销售方未抄报税的专票购买方能抵扣吗?
  • 跨年成本发票红冲怎么做会计分录
  • 残保基金属税金怎么算
  • 质量成本包括哪两个成本
  • 电子税务局如何查询已开发票
  • 税务增加办税人员怎么操作
  • 公司收到境外付款的人民币
  • 发票登记薄的样式是什么
  • 增值税发票的进项和出项要一致吗
  • 报销单据粘贴单样本
  • 购入办公桌椅怎样入账
  • 怎么打开win11的控制面板
  • 2020工资计税基数怎么算
  • 在建工程主要包括哪些
  • 特殊收入扣减异常怎么解释
  • 用友结算成本处理的作用
  • 劳务佣金合法吗?
  • vue表单验证数字
  • phppublic function
  • element-ui table使用type=‘selection‘复选框全禁用-全选禁用
  • 交通费补贴与报销的区别
  • vue实例教程
  • 上个月成本做多了怎么冲账
  • 3月1日前包括什么意思
  • java集合详解以及底层实现
  • dedecms使用教程
  • mongodb安装教程图解
  • 材料暂估成本的账务处理
  • 免交增值税应该计入什么科目
  • asp 数据库
  • 外购商品用于宣传需要缴纳增值税吗
  • 幼儿园会计做账流程
  • 收到员工生育津贴怎么做分录
  • 一般纳税人支付房租账务处理
  • 收据能不能入账账户
  • 红字冲红什么意思
  • 管理费用如何做分录
  • 为什么一般纳税人可以选择简易计税
  • 建筑行业预收账款预缴税
  • 如何把凭证装订机弄坏
  • Mysql使用insert插入多条记录 批量新增数据
  • mysql 正则表达式 是否包含字母
  • redhat配置bond
  • 新一代win10
  • WIN10系统怎么删除3Dmax
  • 修改注册表加快开机速度
  • centos用户添加到组
  • win10系统哪款好
  • win7如何运行命令
  • win8 cmd在哪
  • linux查看开机运行时间
  • linux补丁工具
  • w10鼠标
  • 如何配置sendmail
  • vs2012怎么样
  • nodejs读写json文件
  • ms-dos7.10如何安装
  • jquery滑动效果
  • angular.min.js
  • 用python写随机数
  • python中模块的作用
  • numpy入门
  • javascript数据类型有哪些
  • 安卓手机安装推特
  • python模拟ajax
  • 国家税务总局现任局长
  • 季度申报怎么更正
  • 贤彬考研,刘磊?
  • 房屋维修基金会计分录处理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设