ElementUI 中的使用 v-for 循环出的表单,进行表单验证的方法
...大约 2 分钟
ElementUI 中的使用 v-for 循环出的表单,进行表单验证的方法
正常情况下
在 ElementUI 中,表单验证使用 async-validator(异步校验)实现,正常的使用方法如下:
- el-form 标记对的 rules 属性在数据区绑定为一个对象型数据。
- rules 对象的键名必须与表单元素利用 v-model 绑定的变量名一致。
- rules 对象的键名取值为一个数组,数组元素是表单元素的多个验证规则。
- 也可以直接在 el-form-item 上对表单中的单个元素做验证,多用于动态判断是否给该 item 设置验证条件的情景。
- el-form-item 标记对使用 prop 属性来为表单元素设置需要满足的验证规则。
如下所示
<template>
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-width="100px"
class="demo-ruleForm">
<el-form-item label="活动名称" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')"
>立即创建</el-button
>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
ruleForm: {
name: '',
},
rules: {
name: [
{ required: true, message: '请输入活动名称', trigger: 'blur' },
{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' },
],
},
};
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
},
},
};
</script>
稍微特殊的情况
比如整个表单元素是使用一个数组循环出来的,el-form 上 model 绑定的可以是被遍历数组的父元素,且必须为一个对象。
其次 el-form-item 上的 prop,默认为 model 上绑定对象的子属性,所以可以不用写对象名。其与 input 输入框 v-model 绑定的变量对应。
el-form-item 上的 prop 可以通过数组循环时候的 index 来寻找属性。
<template>
<el-form :model="fullInfo" ref="form" v-if="beltData.length > 0">
<el-row v-for="(item, index) in beltData" :key="item.muckRing">
<el-col :span="12">
<el-form-item
:rules="rules.cuteRate"
:label="item.muckRing + '环'"
:prop="`data.${index}.muckWeight`"
label-width="100px">
<el-input
v-model="fullInfo.data[index].muckWeight"
autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
:rules="rules.correctionValue"
label="标准偏差值"
:prop="`data.${index}.correctionValue`"
label-width="100px">
<el-input
v-model="fullInfo.data[index].correctionValue"
autocomplete="off"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')"
>立即创建</el-button
>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
fullInfo: {
data: [
{
muckWeight: '11',
correctionValue: '12',
},
],
},
rules: {
cuteRate: [
{ required: true, message: '配置不能为空', trigger: 'change' },
{
pattern: '^[0-9]+$|^[0-9]+(\.[0-9]{1,2}){1,1}$',
message: '请输入正确数字(小数位最多两位)',
},
],
correctionValue: [
{ required: true, message: '标准偏差值不能为空', trigger: 'change' },
{
pattern: '^[0-9]+$|^[0-9]+(\.[0-9]{1,2}){1,1}$',
message: '请输入正确数字(小数位最多两位)',
},
],
},
};
},
methods: {
submitForm(formName) {
this.$refs[form].validate((valid) => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
},
},
};
</script>