我有一个带有多种表单的标签容器。所有表单中的一些字段都有一些复杂的逻辑,我不想在每个表单上重复,所以我创建了一个用于所有表单的自定义组件。我正在尝试使用 Vuelidate 来验证我的所有表单,但是由于这些字段名称是相同的,并且当然具有相同的验证逻辑,因此 Vuelidate 验证对象在所有表单中都是相同的,这意味着,如果我填写该email
字段在 formA 中,具有相同字段的所有表单也将正确验证,即使其余表单根本没有填写。
我试图将我的验证包装在一个名为表单的对象中,这似乎正确地分离了所有验证逻辑,但是,我有其他设置阻止我使用data
属性,而我使用computed
属性。据我所知,验证对象必须匹配我们访问字段数据的方式,例如data() { formA: { email } }
匹配验证对象validations: { formA: { email } }
,问题是,由于我没有使用data
属性,我不知道如何映射计算属性。
这就是我所拥有的:
export default {
components: { PhoneField, TopNote, SubmitButton, NameFieldsGroup, EmailField },
validations: {
formA: {
firstName: { required },
lastName: { required },
email: {
required,
email
},
phone: {
required,
length: minLength(10)
}
}
},
created() {
this.$store.commit('setFormValidation', this.$v);
},
data() {
return {}
},
computed: {
firstName: function() {
return this.$store.getters.formState.firstName;
},
lastName: function() {
return this.$store.getters.formState.lastName;
},
email: function() {
return this.$store.getters.formState.email;
},
phone: function() {
return this.$store.getters.formState.phone;
}
}
};
在过去的几天里,我一直在搞砸这个问题,但无法弄清楚。任何人都可以为此提出解决方案吗?