前言
我们在开发时经常会遇到需要对表单数据进行验证的情况。而如果表单中包含了动态循环的数据,这个验证过程就会变得更加复杂。在这种情况下,我们需要使用一些高效的工具来简化我们的开发流程。而正是在这个时候,element 库中提供的表单验证功能就能为我们带来便捷和高效。在本文中,我们将探讨如何使用 element 中的表单验证功能,来处理动态循环的数据。
实现效果:
实现思路:
要想实现这个操作非常简单,其核心在于修改每一个 el-form-item 中 prop 绑定的属性值。默认情况下我们直接将 prop 动态绑定给校验规则的字段即可;在表单中有循环生成的表单体时,我们就需要改变 prop 的写法,如下图:
注意:
每一个循环中都需要加 rules
源码如下:
<template>
<div class="formBox">
<h2>动态数据循环的表单验证</h2>
<!-- 表单 -->
<el-form :model="ruleForm" ref="formRef" :rules="rules" size="medium">
<div class="formContantBox" v-for="(item,index) in ruleForm.formData" :key="index">
<div>
<el-form-item :prop="'formData.'+index+'.name'" :rules="rules.name">
<el-input placeholder="请输入姓名" v-model="item.name" clearable></el-input>
</el-form-item>
</div>
<div>
<el-form-item :prop="'formData.'+index+'.age'" :rules="rules.age">
<el-input placeholder="请输入年龄" v-model="item.age" clearable></el-input>
</el-form-item>
</div>
<!-- 删除按钮 -->
<div v-if="ruleForm.formData.length>'1'">
<el-button size="medium" type="danger" @click="remove(index)">删除</el-button>
</div>
</div>
</el-form>
<!-- 添加/保存按钮 -->
<div>
<el-button size="medium" type="success" @click="addition">添加</el-button>
<el-button size="medium" type="primary" @click="preserve('form')">保存</el-button>
</div>
</div>
</template>
<script>
export default {
data() {
return {
// 校验规则
rules: {
name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
age: [{ required: true, message: "请输入年龄", trigger: "blur" }],
},
// 绑定数据
ruleForm: {
formData: [
{
name: "",
age: "",
},
],
},
};
},
methods: {
// 添加事件
addition() {
this.ruleForm.formData.push({
name: "",
age: "",
});
},
// 删除事件
remove(index) {
this.ruleForm.formData.splice(index, 1);
},
// 提交事件
preserve() {
this.$refs.formRef.validate((valid) => {
if (valid) {
console.log("提交成功!");
} else {
console.log("失败!");
return false;
}
});
},
},
};
</script>
<style scoped>
.formBox {
margin: 20px;
padding: 20px;
background: white;
border-radius: 30px;
}
h2 {
margin-bottom: 20px;
}
.formContantBox {
display: flex;
}
.formContantBox div {
margin-right: 4px;
}
</style>