Управление валидацией валидации в vuetify
Как вы, ребята, делаете проверки в Vuetify? Я не могу обернуть голову вокруг очень подробного синтаксиса проверки.
Я использую Vuelidate и, согласно документам Vuetify, вот как мне нужно реализовать простое обязательное поле:
Авторсценария:
import { required } from 'vuelidate/lib/validators';
computed: {
userNameErrors() {
const errors = []
if (!this.$v.loginForm.userName.$dirty) {
return errors
}
!this.$v.loginForm.userName.required && errors.push('This field is required')
return errors
}
},
validations: {
loginForm: {
userName: {
required
}
}
}
Шаблон:
<v-text-field :label="Username"
prepend-icon="account_circle"
v-model="loginForm.userName"
:error-messages="userNameErrors"
@input="$v.loginForm.userName.$touch()"
@blur="$v.loginForm.userName.$touch()"
:required="true"></v-text-field>
Что я чувствую очень многословно. Возможно, я делаю что-то неправильно, кто-нибудь может сказать, как вы сделали эту минималистичную или короткую руку?
PS Я из фона Angular1 и нг-сообщения были очень классными и простыми!
1 ответ
Я просто предлагаю здесь, но использование vuelidate-errors-extractor делает его немного проще
Я придумал следующее решение для обработки общих проверок:
function handleErrors(fieldName, vueObj) {
const errors = []
if (!vueObj.$v[fieldName].$dirty) return errors
if ('email' in vueObj.$v[fieldName]) {
!vueObj.$v[fieldName].email && errors.push('This email address is invalid')
}
if ('required' in vueObj.$v[fieldName]) {
!vueObj.$v[fieldName].required && errors.push('This field is required')
}
if (fieldName in vueObj.serverErrors) {
vueObj.serverErrors[fieldName].forEach(error => {
errors.push(error)
});
}
return errors
}
Тогда это можно использовать так в вашем объекте Vue:
...
computed: {
emailErrors () {
return handleErrors('email', this)
},
},
...
Затем вы должны обработать возможные типы ошибок в handleError (в этом примере требуются валидаторы электронной почты и валидаторы). Я также использую это, чтобы показать полевые ошибки, возвращенные из серверной части.
Мне также любопытно, может ли это быть решено легче!