前言
-
以element官网的form表单的-动态增减表单项为例讲解表单验证规则
-
动态的功能就是v-model配合push + v-for 便利来实现的
-
我们需要熟知2个知识点prop表单验证需要跟v-model绑定的值是一样的,
-
如果是一个数组便利的表单,那就需要绑定这个数组每一项v-model值。
思路讲解
代码实例
html
<template>
<div>
<el-form
:model="dynamicValidateForm"
ref="dynamicValidateForm"
label-width="100px"
class="demo-dynamic"
>
<el-form-item
prop="email"
label="邮箱"
:rules="[
{ required: true, message: '请输入邮箱地址', trigger: 'blur' },
{
type: 'email',
message: '请输入正确的邮箱地址',
trigger: ['blur', 'change'],
},
]"
>
<el-input v-model="dynamicValidateForm.email"></el-input>
</el-form-item>
<el-form-item
v-for="(domain, index) in dynamicValidateForm.domains"
:label="'域名' + index"
:key="domain.key"
:prop="'domains.' + index + '.value'"
:rules="{
required: true,
message: '域名不能为空',
trigger: 'blur',
}"
>
<el-input v-model="domain.value"></el-input
><el-button @click.prevent="removeDomain(domain)">删除</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm()">提交</el-button>
<el-button @click="addDomain">新增域名</el-button>
<el-button @click="resetForm()">重置</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
export default {
data() {
return {
dynamicValidateForm: {
domains: [
{
value: "",
},
],
email: "",
},
};
},
methods: {
submitForm() {
this.$refs.dynamicValidateForm.validate((valid) => {
if (valid) {
alert("submit!");
} else {
console.log("error submit!!");
return false;
}
});
},
resetForm() {
this.$refs.dynamicValidateForm.resetFields();
},
removeDomain(item) {
var index = this.dynamicValidateForm.domains.indexOf(item);
if (index !== -1) {
this.dynamicValidateForm.domains.splice(index, 1);
}
},
addDomain() {
this.dynamicValidateForm.domains.push({
value: "",
key: Date.now(),
});
},
},
};
</script>
总结:
经过这一趟流程下来相信你也对 vue- form动态表单验证规则-表单验证 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!
什么不足的地方请大家指出谢谢 -- 風过无痕