В Vuetify обработка ошибок и отображение сообщений пользователю строится вокруг компонентов ввода данных, таких как v-text-field, v-select, v-textarea и других элементов формы. Эти компоненты имеют встроенные свойства и методы для интеграции валидации и визуализации ошибок.
error-messagesСвойство error-messages позволяет передавать массив
строк с сообщениями об ошибках:
<v-text-field
label="Email"
v-model="email"
:error-messages="emailErrors"
/>
data() {
return {
email: '',
emailErrors: []
}
},
methods: {
validateEmail() {
this.emailErrors = []
if (!this.email) this.emailErrors.push('Email обязателен')
else if (!/.+@.+\..+/.test(this.email)) this.emailErrors.push('Некорректный формат email')
}
}
Ключевые моменты:
error-messages принимает массив строк, позволяя
отображать сразу несколько ошибок.errorСвойство error работает как логический флаг, который
включает или отключает отображение ошибок:
<v-text-field
label="Пароль"
v-model="password"
:error="passwordInvalid"
error-messages="Пароль должен содержать минимум 8 символов"
/>
data() {
return {
password: '',
passwordInvalid: false
}
},
watch: {
password(value) {
this.passwordInvalid = value.length < 8
}
}
Особенности использования:
error управляет видимостью всех сообщений об
ошибках.error-messages для динамического
отображения ошибок.rulesVuetify предоставляет мощный механизм валидации через массив правил
rules. Каждое правило — это функция, которая возвращает
true при корректных данных или строку с ошибкой при
некорректных:
<v-text-field
label="Имя пользователя"
v-model="username"
:rules="usernameRules"
/>
data() {
return {
username: '',
usernameRules: [
v => !!v || 'Имя пользователя обязательно',
v => (v && v.length >= 3) || 'Минимум 3 символа',
v => (v && /^[a-zA-Z0-9_]+$/.test(v)) || 'Только латинские буквы и цифры'
]
}
}
Преимущества rules:
Для проверки данных на сервере можно использовать промисы в правилах:
<v-text-field
label="Email"
v-model="email"
:rules="[validateEmailAsync]"
/>
methods: {
validateEmailAsync(value) {
if (!value) return 'Email обязателен'
return new Promise((resolve) => {
setTimeout(() => {
if (value === 'taken@example.com') resolve('Email уже используется')
else resolve(true)
}, 500)
})
}
}
Особенности:
Иногда требуется централизованное управление ошибками формы. Для
этого используют v-form и методы
validate() и resetValidation():
<v-form ref="form">
<v-text-field label="Имя" v-model="name" :rules="nameRules" />
<v-text-field label="Email" v-model="email" :rules="emailRules" />
</v-form>
<v-btn @click="submit">Отправить</v-btn>
methods: {
submit() {
if (this.$refs.form.validate()) {
// форма валидна, отправка данных
} else {
// отображены ошибки
}
}
}
Важные моменты:
validate() возвращает true, если все
поля прошли проверку.resetValidation() сбрасывает флаги ошибок и очищает
error-messages.Vuetify позволяет изменять стиль сообщений об ошибках с помощью
слотов error и error-messages:
<v-text-field
label="Телефон"
v-model="phone"
:error-messages="phoneErrors"
>
<template v-slot:error>
<v-icon color="red">mdi-alert-circle</v-icon>
<span>{{ phoneErrors[0] }}</span>
</template>
</v-text-field>
Преимущества кастомного слота:
С использованием Composition API и Vuetify 3, ошибки удобно хранить в
реактивных переменных и использовать computed для генерации
сообщений:
import { ref, computed } from 'vue'
const email = ref('')
const emailErrors = computed(() => {
const errors = []
if (!email.value) errors.push('Email обязателен')
else if (!/.+@.+\..+/.test(email.value)) errors.push('Некорректный формат email')
return errors
})
<v-text-field label="Email" v-model="email" :error-messages="emailErrors" />
Особенности:
computed автоматически обновляет ошибки при изменении
значений.Для сложных форм с зависимыми полями можно использовать функции, проверяющие несколько условий одновременно:
const passwordErrors = computed(() => {
const errors = []
if (!password.value) errors.push('Пароль обязателен')
if (password.value.length < 8) errors.push('Минимум 8 символов')
if (!/[A-Z]/.test(password.value)) errors.push('Должна быть хотя бы одна заглавная буква')
return errors
})
Преимущества:
Vuetify предоставляет гибкую и мощную систему управления ошибками, которая позволяет сочетать встроенные возможности компонентов с кастомной валидацией, асинхронными проверками и централизованной логикой для больших и сложных форм.