Skip to content

CdsForm

Форма объединяет поля в одну группу: собирает их валидацию в общий статус, перехватывает отправку и умеет сбрасывать значения. Поля CDS с пропом rules подключаются к форме автоматически — без регистрации и дополнительного кода.

Storybook GitLab
Покрытие тестами: 100% — хорошее покрытие
API в спеках
20 / 20 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
36 юнит · 0 браузерных
Известные баги
2 зафиксированы тестом it.fails
Покрытие кода
100% строк · 100% ветвей замер v4.0.0-alpha.13
A11y (axe)
10 рекомендаций в 13 историях замер v4.0.0-alpha.11

Форма не рендерит поля сама — собирайте их из CdsTextInput, CdsSelect, CdsCheckbox и других контролов. Правила валидации объявляются на самих полях пропом rules.

Анатомия ​

Форма — нативный form с необязательной шапкой: заголовок и описание рендерятся над контентом, поля из default-слота остаются как есть. Заголовок связывается с формой через aria-labelledby, описание — через aria-describedby.

Вариации ​

Заголовок и описание ​

Свойство label называет форму, description добавляет пояснение под заголовком. Одноимённые слоты принимают произвольную разметку.

Sandbox Storybook

Статус валидности ​

v-model формы — общий статус её полей: null, пока форма не проверялась, false при ошибках и true, когда все поля валидны. Статус обновляется на лету — например, им удобно блокировать кнопку отправки.

Sandbox Storybook

Момент валидации ​

Свойство validate-on задаёт всем полям формы момент запуска проверки; собственный validate-on поля имеет приоритет. Переключите режим и попробуйте: при input (по умолчанию) ошибка появляется по мере ввода, при blur — после ухода из поля, при submit — только при отправке формы.

Sandbox Storybook

Быстрая валидация ​

Свойство first-fail останавливает проверку на первом невалидном поле. Отправьте форму: ошибку покажет только «Имя», хотя «Фамилия» тоже невалидна.

Sandbox Storybook

Состояния ​

disabled блокирует все поля формы разом, readonly оставляет значения видимыми и копируемыми, но запрещает их менять. Отдельные поля настраивать не нужно — состояние наследуется.

Sandbox Storybook

Скрытие деталей ​

Нижним блоком с сообщениями управляет проп hide-details на самих полях: true скрывает блок всегда — вместе с ошибками, false всегда резервирует под него место, auto показывает блок, только когда есть что показать. В плотных формах используйте auto: поля стоят вплотную, но ошибки валидации не теряются. Переключите значение и отправьте пустую форму.

Sandbox Storybook

Слоты ​

Default-слот получает состояние формы и методы управления — кнопки «Проверить» и «Сбросить» собираются без ref на компонент.

Имя слотаОписание
labelСодержимое заголовка (замещает label)
descriptionСодержимое описания (замещает description)
defaultКонтент формы; слот-пропсы: isValid, errors, isValidating, validate, reset, resetValidation
Sandbox Storybook

Рекомендации ​

Сценарии использования ​

Отправка формы ​

Событие submit — это Promise: await event возвращает результат валидации, и обработчик сам решает, отправлять ли данные. Модификатор .prevent отключает нативную отправку страницы. Запрос здесь имитируется setTimeout, кнопка на время «запроса» показывает loading.

Sandbox Storybook

Управление извне ​

Методы validate, reset и resetValidation доступны и через ref на форму. Так управляют формой снаружи — из футера модального окна или панели мастера, где кнопки живут вне разметки формы.

Sandbox Storybook

Vee-validate ​

Форма дружит с внешними библиотеками валидации. С vee-validate схема задаётся в useForm, а сообщения об ошибках полей прокидываются в error-messages.

Sandbox Storybook

Vuelidate ​

С vuelidate правила объявляются декларативно, а ошибки полей так же прокидываются в error-messages.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
descriptionstring | undefined—Описание формы. Рендерится под заголовком через CdsDescription.
disabledboolean | null | undefinednullЗаблокированное состояние
firstFailboolean | undefined—Останавливает валидацию на первом же невалидном поле — остальные поля не проверяются
labelstring | undefined—Заголовок формы. Рендерится над контентом через CdsDescription.
modelValueboolean | null | undefinednullИтоговая валидность формы: true — все поля прошли проверку, false — есть ошибки, null — форма ещё не валидировалась
readonlyboolean | null | undefinednullТолько для чтения
validateOnValidateOn | undefined'input'Когда запускать валидацию полей формы: при вводе, потере фокуса или только вручную

События

ИмяТипОписание
submit[payload: SubmitEventPromise]Отправка формы. Событие — Promise с результатом валидации.
update:modelValue[value: boolean | null]Изменение общего статуса валидности формы (v-model).

Слоты

ИмяТипОписание
default{ errors: FieldValidationResult[]; isDisabled: boolean | null | undefined; isReadonly: boolean | null | undefined; isValidating: boolean; isValid: boolean | null | undefined; items: FormField[]; validate: () => Promise<FormValidationResult>; reset: () => void; resetValidation: () => void; }Основной контент формы. Получает текущее состояние и методы валидации.
descriptionanyОписание формы (переопределяет проп description).
labelanyЗаголовок формы (переопределяет проп label).

Exposed

ИмяТипОписание
errors{ id: string | number; errorMessages: string[]; }[]Ошибки валидации полей формы: идентификатор поля и его сообщения об ошибках.
isDisabledboolean | null | undefinedЗаблокированы ли все поля формы.
isReadonlyboolean | null | undefinedДоступны ли поля формы только для чтения.
isValidboolean | null | undefinedВалидность формы: true — все поля прошли проверку, false — есть ошибки, null — форма ещё не валидировалась.
isValidatingbooleanИдёт ли сейчас валидация формы.
items{ id: string | number; validate: () => Promise<string[]>; reset: () => Promise<void>; resetValidation: () => Promise<void>; vm: Raw<ComponentInternalInstance>; isValid: boolean | null; errorMessages: string[]; }[]Зарегистрированные в форме поля с их состоянием валидации.
resetValidation() => voidСбрасывает только состояние валидации, сохраняя введённые значения.
validate() => Promise<{ valid: boolean; errors: FieldValidationResult[] | { id: string | number; errorMessages: string[]; }[]; }>Запускает валидацию всех полей формы и возвращает результат вместе со списком ошибок.