Vue+iview 组件中通过v-for循环动态生成form表单进行表单校验

在做项目时,需要根据需要动态添加或新增表单,同时还需要对表单做校验。详情如下图:

刚开始做表单验证的时候,对于这个动态的表单验证有点难搞,试了好几种方法都没有搞定。最后按照下面这种方法实现了,以此篇博客留作记录,方便下次遇到类似的需求时直接开发。

XML 复制代码
			<row v-for="(item,index) in dataList">
				<i-Form :model="item" :ref="'dataList'+index" :label-width="language=='en'?140:120">
					<i-col span="10" >
						<Form-Item label="<@s.message code ="KSGL.LABLE.KAOSHIRQI"/>"  :rules="[{required: true, message: '必填'}]"A prop="ksrqs">
						<date-picker :value="item.ksrqs" @on-change="item.ksrqs=$event" format="yyyy-MM-dd" type="date" placeholder="" style="width: 200px"></date-picker>
						</Form-Item>
					</i-col>
					<i-col span="10" >
						<Form-Item label="备注1" prop="bz">
							<i-Input type="text" v-model="item.bz"></i-Input>
						</Form-Item>
					</i-col>
					<i-col span="4" >
						<i-Button size="small" type="error"	@click="handleRemove(index)"><@s.message code ='ACTION.REMOVE'/></i-Button>
					</i-col>
				</i-Form>
			</row>
javascript 复制代码
					let arr = [];
					for (var i=0;i<self.dataList.length;i++){
						let form = 'dataList' + i;
						self.$refs[form][0].validate((valid) => {
							if (valid) {
								arr.push(true);
							} else {
								arr.push(false);
							}
						});
					}
					let flag = arr.every((item) => {
						console.log('item',item)
						return item === true;
					});
					if (flag) {
						self.$Modal.confirm({
							title: i18n('MODEL.CONFIRM_TITLE'),
							content: i18n('MODEL.CONFIRM_CONTENT'),
							//loading: true,
							okText: i18n('MODEL.CONFIRM_OK_TEXT'),
							cancelText: i18n('MODEL.CONFIRM_CANCEL_TEXT'),
							onOk: function()  {

							},
							onCancel: function() {
								self.$Message.info({content:i18n('MODEL.CONFIRM_ON_CANCEL'),duration: 10,background: true,closable: true});
							}
						});
					} else {
						self.$Message.error({content:i18n('VALIDATE.FORM_ERROR'),duration: 10,background: true,closable: true});
					}
相关推荐
kyriewen5 小时前
别再 console.log 了:5 个 Chrome DevTools 调试技巧,用过就回不去了
前端·javascript·面试
IT_陈寒6 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
To_OC7 小时前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
DigitalOcean8 小时前
Laravel 开发者已在 DigitalOcean 上开通超过 10 万台服务器
前端·laravel
星始流年8 小时前
从 Tool 到 Skill——基于 LangChain 的服务端Skill实现
前端·langchain·agent
李惟8 小时前
开源本地通信库,纯客户端 RPC,像聊天一样通信
前端
YAwu118 小时前
深入解析 React 炫彩鼠标跟随标题组件:从坐标定位到动画性能
前端·react.js
GuWenyue8 小时前
排序效率低?5分钟吃透快速排序,性能飙升至O(nlogn)
前端·javascript·面试
OpenTiny社区8 小时前
🎨 看完 GenUI SDK 源码我悟了!
前端·vue.js·github
叁两8 小时前
前端转型AI Agent该如何学习?(前置篇)
前端·人工智能·node.js