Валидация форм в Quasar
↑ 5.3 Quasar · ← Предыдущая · → Следующая
Зачем это на собесе
Встроенная валидация Quasar и её границы; когда подключать VeeValidate.
Объяснение
Поля Quasar принимают массив правил rules: функция возвращает true (валидно) или строку ошибки.
<script setup lang="ts">
const required = (v: unknown) => (v !== null && v !== undefined && v !== "") || "Обязательное поле";
const email = (v: string) => /^\S+@\S+\.\S+$/.test(v) || "Неверный email";
const minLen = (n: number) => (v: string) => (v?.length ?? 0) >= n || `Минимум ${n} символов`;
const uniqueLogin = async (v: string) => (await api.checkLogin(v)) || "Логин занят"; // асинхронные правила поддерживаются
const form = useTemplateRef<QForm>("form");
async function save() {
if (!(await form.value!.validate())) return; // валидация всей формы
await api.save(model.value);
form.value!.resetValidation();
}
</script>
<template>
<q-form ref="form" greedy @submit.prevent="save"> <!-- greedy: показать все ошибки, а не первую -->
<q-input v-model="model.email" label="Email" :rules="[required, email]" lazy-rules="ondemand" :error="!!serverErrors.email" :error-message="serverErrors.email" />
<q-input v-model="model.login" label="Логин" :rules="[required, uniqueLogin]" debounce="500" />
</q-form>
</template>| Возможность | Описание |
|---|---|
rules | массив функций (синхронных/асинхронных) |
lazy-rules | проверка при потере фокуса; ondemand — только при validate() |
hide-bottom-space, no-error-icon | внешний вид |
error/error-message | внешняя ошибка (сервер) |
QForm.validate(), resetValidation(), submit(), reset() | управление |
greedy | валидировать всё, не останавливаться на первой ошибке |
@validation-error / @validation-success | события формы |
Серверные ошибки (422) отображайте через error-message по полям (см. Ответы и ошибки: IResult, ProblemDetails, статус-коды о ProblemDetails).
Ограничения встроенной валидации: правила размазаны по шаблону, нет схемы, сложно сделать зависимые поля и вложенные структуры, нет автоматической типизации — для сложных форм подключают схему (Zod) и VeeValidate (см. Сложные формы: Quasar, VeeValidate и schema-driven validation).
Нюансы и подводные камни
- Асинхронные правила без
debounceсоздают лавину запросов. rules— массив функций, пересоздаваемый при каждом рендере: выносите в константы.- Сообщения нужно локализовать (i18n).
- Валидация UX: не показывайте ошибки до взаимодействия пользователя.
- Проверка на клиенте не заменяет серверную.
Практика
- Реализуйте набор переиспользуемых правил и сообщений через i18n.
- Добавьте асинхронную проверку уникальности с debounce.
- Отобразите ошибки сервера по полям.
Вопросы с ответами
Как работают
rulesв Quasar?Массив функций, возвращающих
trueили текст ошибки; выполняются при вводе/потере фокуса/validate().
Что делает
greedyу QForm?Проверяет все поля и показывает все ошибки, а не только первую.