ElementUI 动态嵌套 el-form 表单校验举例详解
简介
在 ElementUI 中,el-form 是常用的表单组件,用于进行数据录入和数据校验。但是,当表单复杂度较高,需要动态增加或删除表单项时,我们需要使用动态嵌套来实现。本篇文章将详细讲解 ElementUI 动态嵌套 el-form 表单校验的实现方法,包括基础使用方法、动态增加表单项、删除表单项、自定义校验规则等。
基础使用方法
在 ElementUI 中,el-form 的基础使用方法如下:
<el-form :model="form" :rules="rules" ref="form">
<el-form-item label="用户名" prop="username">
<el-input v-model="form.username"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input type="password" v-model="form.password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">提交</el-button>
</el-form-item>
</el-form>
其中,<el-form>
标签的 :model
属性用于绑定表单数据对象,:rules
属性用于绑定表单校验规则,ref
属性用于在组件中获取表单对象。<el-form-item>
标签用于包裹表单项,label
属性用于显示表单项名称,prop
属性用于绑定表单项字段名。<el-input>
标签用于输入表单项的值,v-model
指令用于绑定表单项的值。
在表单提交时,我们需要调用 submitForm
方法,通过 ref
属性获取表单对象,然后调用 validate
方法进行表单校验。
methods: {
submitForm() {
this.$refs.form.validate((valid) => {
if (valid) {
// 表单校验通过,提交表单数据
} else {
// 表单校验失败
}
});
}
}
validate
方法接收一个回调函数作为参数,回调函数的参数 valid
为布尔值,表示表单校验是否通过。
动态增加表单项
在 ElementUI 中,动态增加表单项需要注意以下几点:
-
新增表单项需要添加至
rules
属性的校验规则中。 -
表单数据对象需要动态添加新增表单项的属性。
-
表单项需要动态生成,且需要绑定新生成的表单数据属性。
以下为新增输入多个电话号码的示例代码:
<template>
<el-form :model="form" :rules="rules" ref="form">
<el-form-item label="用户名" prop="username">
<el-input v-model="form.username"></el-input>
</el-form-item>
<div v-for="(phone, index) in form.phones" :key="index">
<el-form-item :label="`电话号码${index + 1}`" :prop="`phone${index + 1}`">
<el-input v-model="phone"></el-input>
</el-form-item>
<el-button type="danger" size="small" icon="el-icon-delete" @click="removePhone(index)"></el-button>
</div>
<el-form-item>
<el-button type="primary" @click="addPhone">添加电话号码</el-button>
<el-button type="primary" @click="submitForm">提交</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
form: {
username: '',
phones: []
},
rules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
phone1: [
{ required: true, message: '请输入电话号码', trigger: 'blur' },
{ pattern: /^1[0-9]{10}$/, message: '请输入正确的电话号码', trigger: 'blur' }
]
}
}
},
methods: {
// 添加电话号码表单项
addPhone() {
const len = this.form.phones.length;
this.form.phones.push('');
this.$set(this.rules, `phone${len + 1}`, [
{ required: true, message: '请输入电话号码', trigger: 'blur' },
{ pattern: /^1[0-9]{10}$/, message: '请输入正确的电话号码', trigger: 'blur' }
]);
},
// 删除电话号码表单项
removePhone(index) {
this.form.phones.splice(index, 1);
delete this.rules[`phone${index + 1}`];
},
// 提交表单数据
submitForm() {
this.$refs.form.validate((valid) => {
if (valid) {
// 表单校验通过,提交表单数据
} else {
// 表单校验失败
}
});
}
}
}
</script>
在示例代码中,我们使用 v-for
指令动态生成多个表单项,每个表单项都需要动态生成校验规则。在 addPhone
方法中,我们通过 push
方法动态添加电话号码表单数据属性,通过 $set
方法动态添加电话号码的校验规则至 rules
属性中。在 removePhone
方法中,我们使用 splice
方法动态删除电话号码表单数据属性,通过 delete
方法动态删除电话号码的校验规则。
删除表单项
在 ElementUI 中,删除表单项需要注意以下几点:
-
删除表单项需要从
rules
属性的校验规则中删除。 -
需要删除表单数据对象中的对应属性。
-
表单项需要动态删除。
以下为删除多个电话号码的示例代码:
<template>
<el-form :model="form" :rules="rules" ref="form">
<el-form-item label="用户名" prop="username">
<el-input v-model="form.username"></el-input>
</el-form-item>
<div v-for="(phone, index) in form.phones" :key="index">
<el-form-item :label="`电话号码${index + 1}`" :prop="`phone${index + 1}`">
<el-input v-model="phone"></el-input>
</el-form-item>
<el-button type="danger" size="small" icon="el-icon-delete" @click="removePhone(index)"></el-button>
</div>
<el-form-item>
<el-button type="primary" @click="addPhone">添加电话号码</el-button>
<el-button type="primary" @click="submitForm">提交</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
form: {
username: '',
phones: []
},
rules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
phone1: [
{ required: true, message: '请输入电话号码', trigger: 'blur' },
{ pattern: /^1[0-9]{10}$/, message: '请输入正确的电话号码', trigger: 'blur' }
]
}
}
},
methods: {
// 添加电话号码表单项
addPhone() {
const len = this.form.phones.length;
this.form.phones.push('');
this.$set(this.rules, `phone${len + 1}`, [
{ required: true, message: '请输入电话号码', trigger: 'blur' },
{ pattern: /^1[0-9]{10}$/, message: '请输入正确的电话号码', trigger: 'blur' }
]);
},
// 删除电话号码表单项
removePhone(index) {
this.form.phones.splice(index, 1);
delete this.rules[`phone${index + 1}`];
},
// 提交表单数据
submitForm() {
this.$refs.form.validate((valid) => {
if (valid) {
// 表单校验通过,提交表单数据
} else {
// 表单校验失败
}
});
}
}
}
</script>
在示例代码中,我们使用 v-for
指令动态生成多个表单项,每个表单项都需要动态生成校验规则。在 addPhone
方法中,我们通过 push
方法动态添加电话号码表单数据属性,通过 $set
方法动态添加电话号码的校验规则至 rules
属性中。在 removePhone
方法中,我们使用 splice
方法动态删除电话号码表单数据属性,通过 delete
方法动态删除电话号码的校验规则。
自定义校验规则
在 ElementUI 中,我们可以通过 validator
属性自定义表单项的校验规则。以下为自定义身份证号码校验规则的示例代码:
<template>
<el-form :model="form" :rules="rules" ref="form">
<el-form-item label="用户名" prop="username">
<el-input v-model="form.username"></el-input>
</el-form-item>
<el-form-item label="身份证号码" prop="id">
<el-input v-model="form.id" :validator="validateId"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">提交</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
form: {
username: '',
id: ''
},
rules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
id: [
{ required: true, message: '请输入身份证号码', trigger: 'blur' },
{ validator: this.validateId, trigger: 'blur' }
]
}
}
},
methods: {
// 校验身份证号码
validateId(rule, value, callback) {
if (!value) {
return callback(new Error('请输入身份证号码'));
}
if (!/^[1-9][0-9]{5}(19|20)[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])[0-9]{3}[0-9xX]$/.test(value)) {
callback(new Error('请输入正确的身份证号码'));
} else {
callback();
}
},
// 提交表单数据
submitForm() {
this.$refs.form.validate((valid) => {
if (valid) {
// 表单校验通过,提交表单数据
} else {
// 表单校验失败
}
});
}
}
}
</script>
在示例代码中,我们使用 <el-input>
标签的 :validator
属性对身份证号码进行校验。在 validateId
方法中,我们使用正则表达式对身份证号码进行格式校验,校验失败则通过回调函数返回错误信息。
结语
本篇文章详细讲解了 ElementUI 动态嵌套 el-form 表单校验的实现方法,包括基础使用方法、动态增加表单项、删除表单项、自定义校验规则等。希望能对大家在日常前端开发中遇到的类似问题有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:elementUI动态嵌套el-form表单校验举例详解 - Python技术站