前言:不知道大家有没有在开发过程中遇到过动态的去添加表单生成同样的验证规则进行校验,我也在这方面踩过坑,并且借鉴别人的观点加上自己的想法,解决了动态添加表单实现验证规则的方法,现在分享给大家,希望能帮助到正在为此发愁的你
动态的添加表单项,相信大家都可以做到,这里就不做过多的解释了,那么如何实现多个重复表单的验证?下面是我结合element 官网和自身遇到的处理方式,呈现给大家。
实现验证规则,我们要注意那些东西
1,prop 绑定的参数设置成对应的必填校验的字段名
<el-form-item label="姓名" prop="name" :rules="rules.name">
<el-input v-model="formData.name"></el-input>
</el-form-item>
2,rules 表单验证规则
<el-form :model="formData" :rules="rules" ref="formData">
</el-form>
3,保证数据源是来源于form表单绑定数据
4,默认值
export default {
data(){
return{
formData:{
name:"",
otherMsg:[
{
professional:""
}
]
}
}
}
}
5, 循环出其他信息,默认展示一条职业信息,可以新增n个职业信息,对每个新增数据进行必填校验验证规则
提醒:prop 绑定的三个参数
- 第一个参数:循环的数组数据
- 第二个参数:每条数据的索引值(下标)
- 第三个参数:必填项校验字段名
<el-form-item
v-for="(msg, index) in formData.otherMsg"
:label="'职业' + (index + 1)"
:key="index"
:prop="'otherMsg.' + index + '.professional'"
:rules="rules.professional"
>
<el-input v-model="msg.professional"></el-input>
<el-button @click.prevent="removeDomain(msg)">删除</el-button>
</el-form-item>
下面是实现动态增加表单校验的完整代码
<template>
<div class="form_container">
<el-form :model="formData" :rules="rules" ref="formRef" label-width="100px">
<el-form-item label="姓名" prop="name" :rules="rules.name">
<el-input v-model="formData.name"></el-input>
</el-form-item>
<el-form-item
v-for="(msg, index) in formData.otherMsg"
:label="'职业' + (index + 1)"
:key="index"
:prop="'otherMsg.' + index + '.professional'"
:rules="rules.professional"
>
<el-input v-model="msg.professional"></el-input>
<el-button @click.prevent="removeDomain(msg)">删除</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('formRef')">提交</el-button>
<el-button @click="addDomain">新增</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
export default {
data() {
return {
formData: {
otherMsg: [
{
professional: ""
}
],
name: ""
}
}
},
computed: {
rules() {
return {
professional: { required: true, message: "个人信息职业不能为空", trigger: "blur" },
name: { required: true, message: " 姓名不能为空", trigger: "blur" }
}
}
},
methods: {
submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
console.log(this.formData)
alert("提交成功")
} else {
console.log("提交失败")
return false
}
})
},
removeDomain(item) {
var index = this.formData.otherMsg.indexOf(item)
if (index !== -1) {
this.formData.otherMsg.splice(index, 1)
}
},
addDomain() {
this.formData.otherMsg.push({
professional: ""
})
}
}
}
</script>
<style>
.form_container {
padding: 20px;
}
</style>
版权归原作者 qwyio 所有, 如有侵权,请联系我们删除。