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

  • 电脑触屏鼠标怎么启动(电脑触屏鼠标怎么关闭)

    电脑触屏鼠标怎么启动(电脑触屏鼠标怎么关闭)

  • 微信连续包月在哪里怎么关闭(微信连续包月在哪取消自动续费)

    微信连续包月在哪里怎么关闭(微信连续包月在哪取消自动续费)

  • 华为watch3移动eSIM如何开通

    华为watch3移动eSIM如何开通

  • mate30防水到什么程度呢(华为mate30防水不?)

    mate30防水到什么程度呢(华为mate30防水不?)

  • 腾讯会议一页能显示几个人(腾讯会议一页能显示个数可以改吗)

    腾讯会议一页能显示几个人(腾讯会议一页能显示个数可以改吗)

  • 屏幕一半亮一半暗(屏幕一半亮一半暗苹果手机)

    屏幕一半亮一半暗(屏幕一半亮一半暗苹果手机)

  • 华为p40nfc怎么用门禁卡(华为p40nfc在哪里打开)

    华为p40nfc怎么用门禁卡(华为p40nfc在哪里打开)

  • vivox27设置找不到视频美颜(vivox20手机为什么在设置里找不到)

    vivox27设置找不到视频美颜(vivox20手机为什么在设置里找不到)

  • 企业微信为什么进不去(企业微信为什么会封号)

    企业微信为什么进不去(企业微信为什么会封号)

  • 关闭secureboot后果(关掉secure boot)

    关闭secureboot后果(关掉secure boot)

  • 多部手机放一起的危害(多台手机放在一起会不会影响)

    多部手机放一起的危害(多台手机放在一起会不会影响)

  • 运动相机和单反的区别(运动相机和单反相机的区别)

    运动相机和单反的区别(运动相机和单反相机的区别)

  • db与dbs和dbms之间关系(db和dbms和dbs的关系)

    db与dbs和dbms之间关系(db和dbms和dbs的关系)

  • 小米mix2s支持30瓦快充吗(小米mix2s支持无线充电吗)

    小米mix2s支持30瓦快充吗(小米mix2s支持无线充电吗)

  • ipad3尺寸(ipad3尺寸对照表)

    ipad3尺寸(ipad3尺寸对照表)

  • 手机怎么连接小米手环(手机怎么连接小爱同学音箱)

    手机怎么连接小米手环(手机怎么连接小爱同学音箱)

  • vivo蓝牙耳机怎么接电话(vivo蓝牙耳机怎么连接苹果手机)

    vivo蓝牙耳机怎么接电话(vivo蓝牙耳机怎么连接苹果手机)

  • 苹果7插耳机的地方在哪(苹果插耳机的孔在哪)

    苹果7插耳机的地方在哪(苹果插耳机的孔在哪)

  • qq免费字体咋设置默认(qq在哪设置免费字体)

    qq免费字体咋设置默认(qq在哪设置免费字体)

  • vue怎么调整字幕大小(vue字幕颜色更改)

    vue怎么调整字幕大小(vue字幕颜色更改)

  • vivo云相册怎么登录(vivo云相册怎么恢复到手机相册)

    vivo云相册怎么登录(vivo云相册怎么恢复到手机相册)

  • 小米盒子我的应用没了(小米盒子我的应用无法返回)

    小米盒子我的应用没了(小米盒子我的应用无法返回)

  • iqoo是否有耳机孔(iqoo3有耳机接口吗)

    iqoo是否有耳机孔(iqoo3有耳机接口吗)

  • Win11如何修改任务栏大小 Win11修改任务栏大小方法(win11如何修改任务栏颜色)

    Win11如何修改任务栏大小 Win11修改任务栏大小方法(win11如何修改任务栏颜色)

  • imontray.exe是不是病毒 是什么进程 imontray进程有什么用(mom.exe是什么)

    imontray.exe是不是病毒 是什么进程 imontray进程有什么用(mom.exe是什么)

  • JavaScript 30 JavaScript 日期格式

    JavaScript 30 JavaScript 日期格式

  • 纯原生html编写的h5视频播放器(将原生html改成vue)

    纯原生html编写的h5视频播放器(将原生html改成vue)

  • 甲方应项目具备开工条件
  • 法人可以是办税人和发票领购人吗
  • 广告服务商是什么意思
  • 51电子发票客户端后使用教程
  • 小微企业所得税优惠政策最新2022
  • 以前年度税款需要交税吗
  • 预借差旅费凭证填写
  • 个体工商户申报年报
  • 公益性捐赠全额扣除2020年第9号文件
  • 奖金多发退回时间怎么算
  • 应付账款多付了
  • 房产税法律制度的重要内容
  • 列举20种不征增值税产品
  • 信托真实案例
  • 一个十图
  • 资本公积转增资本个人股东是否纳税
  • 其他货币资金包括存出保证金吗
  • 加计扣除是什么优惠方式
  • 发票销货清单需要到税务局吗
  • 哪些项目可以在城镇开发边界外
  • 建筑施工企业跨区域如何缴税
  • 副调基金的会计分录怎么做?
  • 报销员工午餐费怎么入账
  • win7如何取消关机
  • sadge什么意思
  • 货币资金资产处置损益表如何填
  • 苹果手机下载手机克隆哪个版本
  • php缓存机制有哪些
  • php for in
  • 资产减值损失在哪个表
  • neoDVDstd.exe - neoDVDstd是什么进程 有什么用
  • 日落时的雪景
  • 鲜艳的多彩的英文
  • 初学者安装visual studio
  • users命令
  • 帝国最新版本
  • 公司的基本户怎么换
  • 企业所得税退税申请理由怎么写
  • 资本公积的项目有哪些
  • 抽烟罚款会计分录
  • 小微企业可以不交税吗
  • 金税盘技术维护费每年都减免么
  • 研发费用凭证是什么样
  • 营销策划合作协议
  • 收到境外企业顾问费
  • 个人向企业借贷违法吗
  • sql 字符串
  • 固定资产计提折旧的会计科目
  • 企业所得税的征税对象包括( )
  • 收到股东投资如何做账
  • 哪些业务可以进入共享服务中心
  • 安全生产费相关规定
  • 预付的展会费如何入账
  • 长期待摊费用如何做账
  • win10如何利用镜像安装系统
  • fedora使用
  • window系统大全
  • win10edge浏览器如何切换到ie
  • weather.exe - weather 进程是什么文件
  • win10 win8.1双系统
  • win7双声道
  • win 8系统怎么样
  • win10安装驱动器
  • Win10 Redstone 14295更新推送:QQ会不时崩溃
  • win8登录密码修改
  • js堆栈和队列
  • [置顶]bilinovel
  • jquery移动div到另一个div中
  • 开发板io口在哪
  • jquery获取table的tr
  • javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
  • 用python发邮件
  • unity ti
  • 安卓手机管家怎么关闭
  • 实例分析法名词解释
  • jquery入门
  • js跨域访问页面控件
  • 一般纳税人开劳务费税率是多少2023
  • 地下车库是否缴房产税
  • 浙江省税务局发短信是真的吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设