Skip to content

Установка и Перезапись полей

Разумеется полями описанными на предыдущей странице не обойтись. Сама конфигурация полей очень проста.

Конфигурация

В данной библиотеке есть хранилище полей. Выглядит оно упрощённо следующим образом:

ts
const store = {
    "date": import('input-date.vue'),
    "text": import('input-text.vue'),
    // И другие
}
const store = {
    "date": import('input-date.vue'),
    "text": import('input-text.vue'),
    // И другие
}

Прямого доступа к хранилищу у нас нет, но мы можем добавлять и переопределять поля используя config:

ts
import {config} from "jenesius-vue-form";
import InputCountry from "./input-country.vue";
import InputText from "./new-input-text.vue";

config({
    inputTypes: {
        country: InputCountry, // Создание нового поля
        text: InputText, // Переопределение существующего
    }
})
import {config} from "jenesius-vue-form";
import InputCountry from "./input-country.vue";
import InputText from "./new-input-text.vue";

config({
    inputTypes: {
        country: InputCountry, // Создание нового поля
        text: InputText, // Переопределение существующего
    }
})

Хорошим тоном является создание новых полей для одинаковых типов(select, radio, checkbox), но разных направлений использования. Например, у вам необходимо отобразить элемент для выбора страны. Лучшей практикой будет создание input-country.vue, определение там списка стран и подключение к <form-field type = "select"/>.

Новое поле

В случаи со странами виджет будет выглядеть следующим образом:

vue
<template>
	<div>
		<form-field
            v-bind = "$attrs"
			type = "select"
            :options = "countryOptions"
        />
	</div>
</template>
<script setup>
import {FormField} from "jenesius-vue-form";

const countryOptions = [
	{ label: 'Canada', value: 'ca' },
	{ label: 'Australia', value: 'au' },
    // Other
]
</script>
<template>
	<div>
		<form-field
            v-bind = "$attrs"
			type = "select"
            :options = "countryOptions"
        />
	</div>
</template>
<script setup>
import {FormField} from "jenesius-vue-form";

const countryOptions = [
	{ label: 'Canada', value: 'ca' },
	{ label: 'Australia', value: 'au' },
    // Other
]
</script>

Мы переопределили type и options, но при этом воспользовались конструкцией v-bind:$attrs, для проброса всех пропсов и событий.

DIV

Обратите внимание на <div>, он необходим для того, чтобы не происходило автоматического пробрасывания параметров. Без него options не будет работать.

Параметры

Если вы устанавливаете поле через config, а затем используйте formField, то вам доступны следующий props:

ts
defineProps<{
	name: string,
    modelValue: any,
    ...
}>()
defineProps<{
	name: string,
    modelValue: any,
    ...
}>()

name

Строковое значение названия поля.

modelValue

Значение поля полученного из формы.

disabled

Логическое значение, принимающее true, если данное поле заблокировано.

changed

Логическое значение, принимающее true, если поле помечено, как изменённое.

errors

Массив строк, хранящий текст ошибок. Является результатом неверной валидации поля.

options

Обработанный массив. Подробнее можно прочитать здесь

Released under the MIT License.