iview form组件,当formItem嵌套使用时,formData会是多层结构的json数据,导致async-validator验证插件失效

news/2025/2/13 13:10:41/

同学们可以私信我加入学习群!


正文开始

  • 前言
  • 一、问题描述
  • 二、解决方案
  • 总结


前言


一、问题描述

在项目中遇到个多层的json数据渲染到页面中,第一层渲染成卡片,第二层渲染成列表,第三层才真正渲染成input标签的场景。
这种多层form数据的场景,无法在form标签中定义:rules变量来实现表单验证。
最终实现的效果如图:
在这里插入图片描述
第一个卡片两条数据之间的验证互不影响,第一个卡片和第二个卡片之间互不影响,而所有卡片都由一个form渲染,这样有利于直接生成一个formData。

二、解决方案

这种场景需要在formItem标签中使用:prop和:rules变量,来为每一项formItem定义规则。

难点在于,:props的定义:

      <FormItemprop="name_test":prop="'rules.' + ruleIndex + '.conditionValueLeft'":rules="{required: true, message: 'Item  can not be empty', trigger: 'blur'}"><Input type="text" v-model="ruleItem.conditionValueLeft"></Input></FormItem>

卡片的渲染不赘述了,主要是每个card标签里面定义一个完整的form表单:

<Form :model="formRules" ref="form"><template v-for="(ruleItem, ruleIndex) in formRules.rules" :key="formDataItem.id+''+ruleIndex"><FormItemprop="name"class="card-form-item":class="{current:ruleIndex==currentRuleIndex && formDataIndex==currentFormDataIndex}"><Row :gutter="8"><Col span="5"><FormItem prop="conditionField"><Select v-model="ruleItem.conditionField"><Option v-for="item in conditionKeyList" :value="item.key" :key="item.key">{{ item.name }}</Option></Select></FormItem></Col><Col span="4"><Select v-model="ruleItem.conditionOption"><Option v-for="item in conditionOptionList" :value="item.key" :key="item.key">{{ item.name }}</Option></Select></Col><Col span="14"><div v-if="ruleItem.conditionOption=='between'" style="display: flex"><FormItemprop="name_test":prop="'rules.' + ruleIndex + '.conditionValueLeft'":rules="{required: true, message: 'Item  can not be empty', trigger: 'blur'}"><Input type="text" v-model="ruleItem.conditionValueLeft"></Input></FormItem><span></span><FormItem prop="conditionValueLeft"><Input type="text" v-model="ruleItem.conditionValueRight"></Input></FormItem></div><Input v-else type="text" v-model="ruleItem.conditionValue" placeholder="Enter something..."></Input></Col></Row><Divider><Icon type="md-trash" v-if="showRemoveRule(ruleIndex)" class="form-item-handle"@click="handleRemoveRule(ruleIndex)"@mouseover="setCurrentIndex(formDataIndex,ruleIndex)" @mouseout="setCurrentIndex(-1)"color="#ed4014"/><Icon v-if="showAddRule(ruleIndex)" type="md-add-circle" class="form-item-handle"@click="handleAddRule(formDataIndex)" color="#2db7f5"/></Divider></FormItem></template></Form>

这是一个复杂查询的业务场景,每个卡片为一个独立的form,form表单的data为formRules,formRules.rules是自定义的复杂查询规则,循环渲染rules后,每个循环体都是一个formItem,而因为每个规则里还会存在多个输入框的情况,所以需要在formItem里再嵌套formItem来区分两个input标签。

:prop="'rules.' + ruleIndex + '.conditionValueLeft'"

rules[ruleIndex]表示循环体formItem,conditionValueLeft表示需要规则定义的formItem的props别名


总结

这段代码要在项目中删了,所以简单记录下,免得后面忘了


http://www.ppmy.cn/news/1186905.html

相关文章

redis实现分布式延时队列

文章目录 延时队列简介应用场景案例&#xff1a;考虑&#xff1a;实现&#xff1a;整体思路&#xff1a;具体实现生产者消费者 运行结果 redis分布式延时队列优势redis分布式延时队列劣势 延时队列简介 延时队列是一种特殊的消息队列&#xff0c;它允许将消息在一定的延迟时间…

数据结构线性表——顺序表

前言&#xff1a;小伙伴们好久不见&#xff0c;从这篇文章开始&#xff0c;我们就要正式进入数据结构的学习啦。 学习的难度也将逐步上升&#xff0c;希望小伙伴们能够和博主一起坚持&#xff0c;一起加油&#xff01;&#xff01;&#xff01; 目录 一.什么是线性表 二.什么…

android wifi和数据网络(以太网切换)出现的问题

场景1&#xff1a; 在实车上测试车机连接路由器的性能&#xff0c;车机连接着以太网&#xff0c;但是以太网没有网 然后车机通过WIFI连接一个路由器&#xff0c;电脑也连接路由器&#xff0c;突然发现车机通过路由器无法ping通路由器下的电脑&#xff0c;而且也ping不通路由器…

【Amazon】跨AWS账号资源授权存取访问

文章目录 一、实验框架图二、实验过程说明三、实验演示过程1、在A账号中创建S3存储桶2、在A账号创建S3存储桶访问策略3、在A账号创建信任开发账号的角色4、在B账号为用户添加内联策略5、在B账号中切换角色&#xff0c;以访问A账号中的S3资源 四、实验总结 一、实验框架图 本次…

损失函数总结(十):TripletMarginLoss、TripletMarginWithDistanceLoss

损失函数总结&#xff08;十&#xff09;&#xff1a;TripletMarginLoss、TripletMarginWithDistanceLoss 1 引言2 损失函数2.1 TripletMarginLoss2.2 TripletMarginWithDistanceLoss 3 总结 1 引言 在前面的文章中已经介绍了介绍了一系列损失函数 (L1Loss、MSELoss、BCELoss、…

fl studio哪个版本好?fl studio21汉化破解版2024免费下载安装图文激活教程

fl studio哪个版本好?fl studio21汉化破解版2024免费下载安装图文激活教程 fl studio21破解版下载专区由兔八哥爱分享小编精心为大家整理了fl studio软件所有版本合集。其中包含了fl studio21修改版、fl studio 20汉化修改版、fl studio21中文修改版、水果fl studio20完美汉化…

react路由懒加载lazy直接使用组件标签引发的问题?

文章 前言错误场景解决方案问题分析后言 前言 ✨他们是天生勇敢的开发者&#xff0c;我们创造bug&#xff0c;传播bug&#xff0c;毫不留情地消灭bug&#xff0c;在这个过程中我们创造了很多bug以供娱乐。 ✨ 这里是前端的一些bug 感兴趣的可以看看前端bug 错误场景 在react18t…

ios 代码上下文截屏之后导致的图片异常问题

业务场景&#xff0c;之前是直接将当前的collectionview截长屏操作&#xff0c;第一次截图会出现黑色部分原因是视图未完全布局&#xff0c;原因是第一次使用了Masonry约束然后再截图的时候进行了frame赋值&#xff0c;可以查看下Masonry约束和frame的冲突&#xff0c;全部修改…