Метаданные формы - массив объектов, содержащих имя поля, имя компонента, с которым будет взаимодействовать пользователь, объект параметров для компонента:
const formMeta = ref([
{
name: '...',
component: '...',
props: { ... },
},
...
]);
Данные формы - объект, в качестве ключей будут выступать значения свойств
name
элементов
formMeta
. Изначально можно сделать пустым:
const formData = ref({});
. Можно явно задать начальные значения:
const formData = ref({
имяПоля1: значение1,
имяПоля2: значение2,
...
});
Или есть вариант доставать ключи и дефолтные значения из метаданных:
const formData = ref(Object.fromEntries(formMeta.value.map(n => [
n.name,
n.defaultValue ?? null,
])));
На основе
formMeta
создаётся форма, через
v-model
свойства
formData
связываются с экземплярами компонентов:
<form>
<div v-for="n in formMeta">
<component
:is="components[n.component]"
v-model="formData[n.name]"
v-bind="n.props"
/>
</div>
</form>
Вот как-то так.