Текстовые поля являются одним из наиболее часто используемых элементов интерфейса. В Petite-Vue их обработка строится вокруг двусторонней привязки данных, реактивности и простых директив.
В Petite-Vue используется директива v-model для
синхронизации значения текстового поля с реактивным состоянием.
Например:
<div v-scope="{ username: '' }">
<input type="text" v-model="username" placeholder="Введите имя">
<p>Вы ввели: {{ username }}</p>
</div>
v-model="username" связывает поле ввода с переменной
username.username.username в коде автоматически обновляет
текстовое поле.Особенности работы v-model:
number:<input type="text" v-model.number="age" placeholder="Возраст">
<input type="checkbox" v-model="isSubscribed">
<input type="radio" value="male" v-model="gender">
Petite-Vue поддерживает вычисляемые свойства через
функции внутри объекта v-scope. Это позволяет автоматически
обрабатывать текст без необходимости вручную отслеживать изменения.
<div v-scope="{ firstName: '', lastName: '', get fullName() { return `${this.firstName} ${this.lastName}` } }">
<input type="text" v-model="firstName" placeholder="Имя">
<input type="text" v-model="lastName" placeholder="Фамилия">
<p>Полное имя: {{ fullName }}</p>
</div>
fullName автоматически обновляется при изменении
firstName или lastName.get позволяет создавать реактивные
вычисляемые значения без отдельной функции computed.Помимо v-model, для текстовых полей доступны стандартные
события:
@input — срабатывает при любом изменении текста.@change — срабатывает при завершении редактирования
(обычно при потере фокуса).@keydown, @keyup, @keypress —
обработка нажатий клавиш.Пример:
<div v-scope="{ message: '' }">
<input type="text" v-model="message" @input="console.log(message)">
</div>
@input позволяет выполнять валидацию или
трансформацию текста в реальном времени.v-modelPetite-Vue поддерживает несколько модификаторов, упрощающих работу с текстовыми полями:
.trim — удаляет лишние пробелы по краям:<input type="text" v-model.trim="username">
.number — автоматически преобразует значение в
число:<input type="text" v-model.number="age">
.lazy — обновление переменной происходит только при
событии change, а не на каждом вводе:<input type="text" v-model.lazy="message">
Фокус и выделение текста можно контролировать через обычные DOM-свойства и методы в сочетании с реактивным состоянием:
<div v-scope="{ inputRef: null }">
<input type="text" ref="inputRef">
<button @click="inputRef.focus()">Фокус на поле</button>
</div>
ref позволяет получить ссылку на DOM-элемент.focus(), select() и другие
стандартные свойства доступны напрямую.В Petite-Vue нет встроенной системы валидации, но её легко реализовать через реактивные переменные:
<div v-scope="{ email: '', isValid: false }">
<input type="text" v-model="email" @input="isValid = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)">
<p v-if="!isValid && email.length > 0">Неверный формат email</p>
</div>
@input.isValid позволяет автоматически
обновлять состояние интерфейса.Для сложного форматирования можно использовать вычисляемые свойства
или слушатели @input:
<div v-scope="{ phone: '' }">
<input type="text" v-model="phone" @input="phone = phone.replace(/\D/g, '')">
<p>Телефон: {{ phone }}</p>
</div>
(XXX) XXX-XXXX.textarea в Petite-Vue работает так же, как обычный
input:
<div v-scope="{ comment: '' }">
<textarea v-model="comment" rows="5" placeholder="Введите комментарий"></textarea>
<p>Длина текста: {{ comment.length }}</p>
</div>
v-model сохраняет текст в
переменной comment.input..lazy, если требуется минимизировать
количество обновлений переменных при быстром наборе текста.<div v-scope="{ form: { name: '', email: '' } }">
<input v-model="form.name">
<input v-model="form.email">
</div>
Текстовые поля в Petite-Vue сочетают простоту синтаксиса с полной
реактивностью и гибкостью. Директива v-model обеспечивает
мгновенное связывание данных, а события и вычисляемые свойства позволяют
реализовывать динамическое поведение, валидацию и сложное форматирование
без дополнительной нагрузки.