位置: 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及其变种

  • 真我q3s充电是多少瓦(真我q3i充电器多少w)

    真我q3s充电是多少瓦(真我q3i充电器多少w)

  • 微信号怎么修改(微信号怎么修改第二次)

    微信号怎么修改(微信号怎么修改第二次)

  • 小米5手环什么时候发布(小米5手环什么时候上市时间)

    小米5手环什么时候发布(小米5手环什么时候上市时间)

  • 快手直播唱歌怎么放伴奏(快手直播唱歌怎么关原唱)

    快手直播唱歌怎么放伴奏(快手直播唱歌怎么关原唱)

  • 爱奇艺学生会员限制(爱奇艺学生会员可以登录几个设备)

    爱奇艺学生会员限制(爱奇艺学生会员可以登录几个设备)

  • 华为eva-aloo什么型号(华为eva aloo)

    华为eva-aloo什么型号(华为eva aloo)

  • 喜马拉雅的功能和特点(喜马拉雅的功能有哪些)

    喜马拉雅的功能和特点(喜马拉雅的功能有哪些)

  • 苹果8左上角阴影怎么消除(iphone8p左上角)

    苹果8左上角阴影怎么消除(iphone8p左上角)

  • 新imessage信息什么意思

    新imessage信息什么意思

  • 抖音拉黑和移除的区别(抖音拉黑和移除还能搜到对方吗)

    抖音拉黑和移除的区别(抖音拉黑和移除还能搜到对方吗)

  • 什么可以代替手指触屏(什么可以代替手机触屏笔)

    什么可以代替手指触屏(什么可以代替手机触屏笔)

  • 华为高对比文字有啥用(华为高比度文字)

    华为高对比文字有啥用(华为高比度文字)

  • 苹果手机用什么软件下载东西(苹果手机用什么卡信号网络最好)

    苹果手机用什么软件下载东西(苹果手机用什么卡信号网络最好)

  • 华为一直卡在皮套模式(华为手机一直卡在华为界面)

    华为一直卡在皮套模式(华为手机一直卡在华为界面)

  • 华为lonal00什么型号(华为lonal00手机报价)

    华为lonal00什么型号(华为lonal00手机报价)

  • 小米9怎么开启wlan热点(小米9怎么开启无线反向充电)

    小米9怎么开启wlan热点(小米9怎么开启无线反向充电)

  • 手机悬浮键盘怎么打开(手机悬浮键盘怎么关闭)

    手机悬浮键盘怎么打开(手机悬浮键盘怎么关闭)

  • vue视频怎么把字幕调大(如何在vue视频上写字)

    vue视频怎么把字幕调大(如何在vue视频上写字)

  • 硒鼓怎么安装视频(硒鼓装法)

    硒鼓怎么安装视频(硒鼓装法)

  • 亲属卡可以发红包吗(亲属卡发红包)

    亲属卡可以发红包吗(亲属卡发红包)

  • 腾达扩大器怎么连接(腾达扩大器怎么从新链接)

    腾达扩大器怎么连接(腾达扩大器怎么从新链接)

  • 菜鸟裹裹如何线上支付(菜鸟裹裹如何线上寄件)

    菜鸟裹裹如何线上支付(菜鸟裹裹如何线上寄件)

  • 苹果6无法激活触控id      (苹果6无法激活需要更新以激活)

    苹果6无法激活触控id (苹果6无法激活需要更新以激活)

  • Python实战-新能源王者宁德时代股权穿透研究(附完整代码)(新版python)

    Python实战-新能源王者宁德时代股权穿透研究(附完整代码)(新版python)

  • iframe标签的使用(iframe标签表示的框架)

    iframe标签的使用(iframe标签表示的框架)

  • 应收账款的期末余额在借方表示什么意思
  • 进项票可以抵扣销项票吗
  • 高铁票丢失了可以二次打印吗
  • 净资产包含哪些方面
  • 小规模纳税人综合税负
  • 其他收益会计分录
  • 超额投资是什么意思
  • 金税三期国地税合并
  • 进项税额转出补交税金会计分录
  • 承包工程会计账务处理流程
  • 公司开出增值税发票可以作为货款证据起诉
  • 样板房 家具
  • 产品成本计算的公式
  • 不含税的营业收入是什么意思
  • 进项发票税点属于什么科目?
  • 产品成本核算的一般程序
  • 小规模9万是含税吗
  • 成本费用调整法
  • 先收钱后开票怎么做分录
  • 企业风险报酬转移怎么理解
  • 公司车辆违章怎么办
  • 其他应收款注销数额太大
  • 默认网关不可用win7
  • php不同用户登录不同页面
  • 怎么用onekey重装系统
  • php中cookie和session的区别
  • 财务费用属于期间汇转账户吗
  • phppost带cookie提交
  • 直接材料费用包括
  • 汽车定额发票怎么填写
  • java deep learning
  • 海岸边上
  • css伪类选择器实例
  • python编程爱心形状
  • ChatGPT5是否会影响人类的发展和工作?
  • node js教程
  • 前端实际开发
  • 交易性金融资产的入账价值
  • 无偿划转资产涉及产权转移应交税
  • 工程款发票的数量和单价
  • 出口免抵退转免税
  • 出口免税免的是哪部分的税
  • 小规模纳税人增值税税率
  • dedecms模版
  • 帝国cms建站实例教程
  • 视同小规模纳税人是有?
  • 普通发票可抵税吗
  • 个人缴纳税是什么意思
  • 本月开发票下月收款
  • 工资标准表
  • 新准则公允价值变动科目余额为负数
  • 跨年的个人所得税可以更正吗
  • 进销项月末结转吗
  • 如何填写出售固定资产表
  • 产品研发费用的计算公式
  • 企业所得税税负率多少合适
  • linux rpm文件怎么安装
  • wrsvn.exe是什么文件
  • Win7旗舰版系统镜像文件
  • windows server core license
  • safari macos
  • mac 邮箱
  • 容器内存限制
  • linux下scp远程拷贝包含空格的目录或者文件的解决方法
  • memory在电脑里是什么意思
  • linux wc命令详解
  • windows8使用技巧
  • win8怎么看电脑wifi密码
  • WIN10远程桌面连接一直在配置远程会话
  • python占位
  • java怎样学
  • Node.js中的全局对象有
  • android指南针源码
  • Javascript字符串对象函数
  • javascript命名规范
  • jquery $each
  • 福建省国家税务总局稽查局局长
  • 税务稽查审理的基本原则
  • 企业报税年报如何填写
  • 增值税专用发票怎么开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设