Skip to main content

createFormFromModel()

function createFormFromModel<T>(args): FormGroup<T>;

Defined in: form/create-form.ts:193

Собрать форму из FormModel и единой схемы (низкоуровневая фабрика).

Значения принадлежат модели (источник истины), ноды формы держат UI/валидационное состояние и ссылаются на сигналы модели по идентичности. Обходит структуру модели и строит ноды по виду её узлов, привязывает конфиг поля (component/componentProps) из схемы, материализует массивы под-форм (FormArray, на любой глубине), заполняет реестр ручка→нода (для enableWhen, apply/applyEach и роутинга ошибок) и, при наличии, запускает декларативное поведение (cleanup живёт на форме).

Обычно вызывается сборкой одним вызовом (createForm): она строит дерево схемы, зовёт эту фабрику и собирает валидацию. Прямой вызов нужен там, где бандл не нужен, — форма элемента массива, тесты, свой слой сборки.

Type Parameters​

T​

T

Тип модели данных формы

Parameters​

args​

CreateFormFromModelArgs<T>

Модель, единая схема и (опционально) декларативное поведение CreateFormFromModelArgs

Returns​

FormGroup<T>

Группа формы FormGroup с нодами полей по именам

Example​

import { createModel, createFormFromModel } from '@reformer/core';

interface Form {
email: string;
profile: { name: string; age: number };
}

const model = createModel<Form>({ email: '', profile: { name: '', age: 0 } });
const schema = {
component: Section,
children: [
// Layout несёт только component/componentProps; правила — в отдельной ValidationDefinition.
{ model: model.$.email, component: Input },
// вложенная группа: `model.$.profile.name` (≡ под-модель `model.profile.$.name` — тот же сигнал)
{ model: model.$.profile.name, component: Input },
],
};

const form = createFormFromModel<Form>({ model, schema });

// Двусторонняя связь нода ↔ модель:
form.email.setValue('user@mail.com');
console.log(model.email); // 'user@mail.com'

See​

createForm — сборка одним вызовом: модель, форма, валидация и дерево для рендера