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

  • 苹果手机怎么设置流量下载不限制(苹果手机怎么设置手写)

    苹果手机怎么设置流量下载不限制(苹果手机怎么设置手写)

  • 天猫开团什么意思(天猫开团和发售)

    天猫开团什么意思(天猫开团和发售)

  • 华为畅享10plus有红外线吗(华为畅享10plus有红外线遥控功能吗)

    华为畅享10plus有红外线吗(华为畅享10plus有红外线遥控功能吗)

  • 安装拨号网络的目的是为了什么(安装拨号网络的操作)

    安装拨号网络的目的是为了什么(安装拨号网络的操作)

  • sas接口和sata接口的区别(sas接口和sata接口能混插吗)

    sas接口和sata接口的区别(sas接口和sata接口能混插吗)

  • amd x4 955相当于i几(amd x4 955 95w)

    amd x4 955相当于i几(amd x4 955 95w)

  • 手机激活时间和购买时间不一致(手机激活时间和保修日期有什么关系)

    手机激活时间和购买时间不一致(手机激活时间和保修日期有什么关系)

  • 苹果7能更新13.3吗(苹果7能更新15系统吗)

    苹果7能更新13.3吗(苹果7能更新15系统吗)

  • 操作系统管理的计算机系统资源包括(操作系统管理的软硬件资源有哪些)

    操作系统管理的计算机系统资源包括(操作系统管理的软硬件资源有哪些)

  • vivox30左侧按钮有啥用(x30vivo左边的按键是什么)

    vivox30左侧按钮有啥用(x30vivo左边的按键是什么)

  • ip65与ip67的区别(ip65与ip66的区别)

    ip65与ip67的区别(ip65与ip66的区别)

  • 微信为什么突然掉线了(微信为什么突然自动退出登录)

    微信为什么突然掉线了(微信为什么突然自动退出登录)

  • 微博草稿箱在哪儿(微博草稿箱在哪里)

    微博草稿箱在哪儿(微博草稿箱在哪里)

  • 阿里巴巴是什么意思(阿里巴巴是什么公司)

    阿里巴巴是什么意思(阿里巴巴是什么公司)

  • 如何让歌词在苹果手机桌面(如何让歌词出现在苹果手机上)

    如何让歌词在苹果手机桌面(如何让歌词出现在苹果手机上)

  • 手机导航和车怎么连接(用手机导航怎么和车同步)

    手机导航和车怎么连接(用手机导航怎么和车同步)

  • ios13正式版发布时间(iphone13正式发布)

    ios13正式版发布时间(iphone13正式发布)

  • 嘀嗒一天可以接几单(嘀嗒一天只能接4单吗)

    嘀嗒一天可以接几单(嘀嗒一天只能接4单吗)

  • 陌陌版本beta已过期什么意思(陌陌该版本已停止服务请升级)

    陌陌版本beta已过期什么意思(陌陌该版本已停止服务请升级)

  • meltu是什么相机(m|u|相机是什么意思)

    meltu是什么相机(m|u|相机是什么意思)

  • k歌怎么唱好听(k歌怎么唱歌)

    k歌怎么唱好听(k歌怎么唱歌)

  • 拼多多订单货号怎么看(拼多多货号怎么查)

    拼多多订单货号怎么看(拼多多货号怎么查)

  • 怎么取消苹果订阅自动续费(怎么取消苹果订单)

    怎么取消苹果订阅自动续费(怎么取消苹果订单)

  • 小米8otg功能怎么开启

    小米8otg功能怎么开启

  • windows7旗舰版系统桌面图标删不了的解决方法(windows7旗舰版最新版本)

    windows7旗舰版系统桌面图标删不了的解决方法(windows7旗舰版最新版本)

  • 投稿指南【NO.7】目标检测论文写作模板(初稿)(投稿p2)

    投稿指南【NO.7】目标检测论文写作模板(初稿)(投稿p2)

  • python如何将字典内容写入json文件(python如何将字典中的键值互换)

    python如何将字典内容写入json文件(python如何将字典中的键值互换)

  • 一般纳税人劳务费税率是多少
  • 自行申报是什么征收方式
  • 分公司报增值税吗
  • 承兑汇票怎么做假
  • 零申报小微企业注销有影响吗
  • 赠送产品能直接用吗
  • 运输费计入采购成本的分录
  • 小企业发生销售折让的原因
  • 怎么确定是不是本人
  • 印花税是按照含税收入乘以印花税税率吗
  • 印花税申报完成后如何缴款
  • 建安业核定征收利润率
  • 增值税普通发票和电子普通发票的区别
  • 工程检测费入什么科目
  • 收到政府补助怎么发朋友圈
  • 企业收到的贷款会计分录
  • 保证金计入哪个会计科目
  • 管理费用和财务费用在资产负债表怎么填
  • Mac怎么禁用icloud
  • 融资租赁吗
  • 10款手机赚钱软件下载
  • 在php中使用什么获取文件的修改时间
  • mac os常用快捷键
  • 呆滞品报废入什么科目
  • 增值税发票销货清单怎么打印
  • 几款常用的表单设计软件
  • php合并两个二维数组
  • ant desgin-vue
  • php的implode
  • vue3.0配置
  • bg命令 将作业放到后台运行
  • 公允价值变动损益会计处理
  • phpweb缓存技术
  • 文化事业建设费的征收范围
  • 企业所得税核查报告
  • 金蝶财务软件系统要求
  • 红字发票开错可以重开吗
  • 形成固定资产的主要手段是
  • python里eval的用法
  • mongodb与mysql相比的优缺点
  • php注册系统
  • 电子发票开出后如何查看
  • 商品流通企业的含义
  • 税前扣除项目主要包括
  • 小企业长期债券投资入账价值
  • 纳税人有
  • 免税收入怎么做会计分录
  • 偶然所得代扣代缴个人所得税会计分录
  • 购进国内交通运输产品
  • 公司在银行买的金条怎么入账
  • 单位食堂收费制度
  • 应付账款和预收账款是负债吗
  • 资产损失扣除
  • 公司的残保金是分摊到员工身上的吗
  • sql分几类
  • 构建dockerfile
  • wave editor教程
  • win7系统打不开网络和共享中心
  • centos查询所有用户
  • 开启电脑上帝模式
  • windows10虚拟桌面
  • Windows搭建代理服务器
  • jquery动画库
  • 计算机图形学和计算机视觉的区别
  • js调用wsdl接口
  • 好用的shell终端
  • python的理解
  • pycharm怎么学
  • python求解析解
  • python如何查询函数用法
  • js 不用var
  • Python中random模块
  • js中如何弹出提示框
  • Android之ContentProvider
  • css实现无缝滚动
  • 一个月可不可以瘦十斤
  • 车辆保险增值税税率是多少
  • 车船发票什么样子
  • 呼市地方税务局电话
  • 被审计了意味着什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设