v-textarea — это компонент библиотеки Vuetify,
предназначенный для ввода многострочного текста. Он расширяет
стандартный HTML-элемент <textarea> и добавляет
возможности оформления, валидации, управления состоянием и интеграции с
системой компонентов.
Текстовые области используются в интерфейсах для:
Компонент полностью интегрирован с экосистемой Vue.js и поддерживает реактивную модель данных.
Минимальный пример текстовой области:
<v-textarea label="Сообщение"></v-textarea>
В этом случае создаётся поле ввода с плавающей подписью.
Чаще всего текстовое поле связывается с реактивными данными через
v-model.
<v-textarea
v-model="message"
label="Сообщение"
></v-textarea>
export default {
data() {
return {
message: ''
}
}
}
Теперь значение текстовой области автоматически синхронизируется с
переменной message.
Отображает подпись поля.
<v-textarea
label="Описание"
></v-textarea>
Подпись автоматически перемещается вверх при фокусе или вводе текста.
Отображает подсказку внутри поля.
<v-textarea
placeholder="Введите текст..."
></v-textarea>
placeholder исчезает после ввода символов.
Определяет начальное количество строк текстовой области.
<v-textarea
rows="4"
label="Комментарий"
></v-textarea>
Это задаёт минимальную высоту поля.
Автоматически увеличивает высоту поля при вводе текста.
<v-textarea
auto-grow
label="Сообщение"
></v-textarea>
Особенности поведения:
Отображает счётчик введённых символов.
<v-textarea
v-model="text"
counter
label="Описание"
></v-textarea>
Можно указать максимальное количество символов:
<v-textarea
v-model="text"
counter="200"
label="Описание"
></v-textarea>
Внизу поля будет отображаться:
54 / 200
Ограничение вводимых символов задаётся свойством
maxlength.
<v-textarea
v-model="text"
maxlength="300"
counter
></v-textarea>
Поведение:
Полностью блокирует поле.
<v-textarea
label="Комментарий"
disabled
></v-textarea>
Поле становится неактивным и недоступным для ввода.
Поле отображает текст, но не позволяет его изменять.
<v-textarea
v-model="text"
readonly
></v-textarea>
Используется для отображения данных без редактирования.
Vuetify поддерживает несколько визуальных вариантов текстовых полей.
Контурное поле.
<v-textarea
outlined
label="Описание"
></v-textarea>
Характеристики:
Заполненный стиль.
<v-textarea
filled
label="Комментарий"
></v-textarea>
Особенности:
Самостоятельное поле без стандартной рамки.
<v-textarea
solo
label="Сообщение"
></v-textarea>
Часто используется в карточках и формах с минималистичным дизайном.
Свойство color определяет основной цвет компонента.
<v-textarea
label="Описание"
color="primary"
></v-textarea>
Возможные значения соответствуют теме Vuetify:
primarysecondarysuccesserrorwarninginfoПример:
<v-textarea
label="Комментарий"
color="success"
></v-textarea>
Принудительно отображает состояние ошибки.
<v-textarea
error
label="Описание"
></v-textarea>
Поле подсвечивается цветом ошибки.
Отображает текст ошибки.
<v-textarea
label="Комментарий"
error-messages="Поле обязательно"
></v-textarea>
Можно передавать массив сообщений:
<v-textarea
:error-messages="errors"
></v-textarea>
Vuetify позволяет задавать правила проверки через
rules.
<v-textarea
v-model="message"
:rules="rules"
label="Сообщение"
></v-textarea>
export default {
data() {
return {
message: '',
rules: [
v => !!v || 'Поле обязательно',
v => v.length >= 10 || 'Минимум 10 символов'
]
}
}
}
Каждое правило — функция, возвращающая:
true — если проверка успешнаСвойство clearable добавляет кнопку очистки.
<v-textarea
v-model="message"
clearable
label="Сообщение"
></v-textarea>
При нажатии на иконку поле очищается.
Добавляет текст подсказки под полем.
<v-textarea
label="Описание"
hint="Введите подробное описание"
></v-textarea>
Подсказка отображается постоянно.
<v-textarea
hint="Минимум 20 символов"
persistent-hint
></v-textarea>
Без этого свойства подсказка появляется только при фокусе.
Добавляет иконку перед полем.
<v-textarea
prepend-icon="mdi-message"
label="Сообщение"
></v-textarea>
Добавляет иконку после поля.
<v-textarea
append-icon="mdi-send"
></v-textarea>
Комбинация auto-grow и rows позволяет
контролировать поведение поля.
<v-textarea
auto-grow
rows="2"
label="Комментарий"
></v-textarea>
Можно задать максимальное количество строк:
<v-textarea
auto-grow
rows="3"
row-height="24"
></v-textarea>
Текстовая область поддерживает стандартные события Vue.
Вызывается при изменении текста.
<v-textarea
v-model="text"
@input="onInput"
></v-textarea>
methods: {
onInput(value) {
console.log(value)
}
}
Срабатывает при получении фокуса.
<v-textarea
@focus="onFocus"
></v-textarea>
Срабатывает при потере фокуса.
<v-textarea
@blur="onBlur"
></v-textarea>
<v-form ref="form">
<v-textarea
v-model="message"
label="Сообщение"
outlined
auto-grow
counter="500"
:rules="rules"
></v-textarea>
<v-btn
color="primary"
@click="submit"
>
Отправить
</v-btn>
</v-form>
export default {
data() {
return {
message: '',
rules: [
v => !!v || 'Введите сообщение',
v => v.length >= 20 || 'Минимум 20 символов'
]
}
},
methods: {
submit() {
if (this.$refs.form.validate()) {
console.log(this.message)
}
}
}
}
Форма выполняет следующие задачи:
Текстовые области используются в большинстве веб-интерфейсов:
Комментарии
Комментарий к статье
Отзывы пользователей
Отзыв о товаре
Описание объектов
Описание проекта
Описание товара
Описание профиля
Формы поддержки
Сообщение в службу поддержки
Компонент v-textarea объединяет функциональность
стандартного HTML-элемента <textarea> с системой тем,
реактивности и валидации Vuetify, что позволяет создавать масштабируемые
и удобные формы ввода текста.