Работа с input, checkbox, textarea, radio, select, директива v-model в Vue
- Работа с input, подробнее
- Работа с checkbox, подробнее
- Работа с textarea, подробнее
- Работа с radio, подробнее
- Работа с select, подробнее
Работа с input
Мы можем связать свойство message и инпут таким образом, чтобы изменение любого из них приводило к изменению другого. Это делается с помощью директивы v-model, в которой указывается свойство, привязанное к инпуту:
App.vue<template>
<input v-model="message">
</template>
Пусть также у нас есть свойство message:
App.vuedata()
{
return {
message: 'hello',
}
}
После запуска кода в инпуте будет стоять текст свойства message. А если поредактировать данные в инпуте — свойство также изменится соответствующим образом. Чтобы увидеть это, давайте выведем введенное в инпут содержимое где-нибудь в абзаце:
App.vue<template>
<input v-model="message">
<p>{{ message }}</p>
</template>
Для типа number, можно выставить ограничение и минимальное значение:
App.vue<template>
<input v-model="yourSizeWidth" :min="1" :max="125" type="number">
</template>
App.vuedata()
{
return {
yourSizeWidth: 1,
}
}
Работа с textarea
Работа с textarea происходит абсолютно также, как и с инпутами — через директиву v-model. Давайте посмотрим на практике. Сделаем свойство, которое будем привязывать к нашему тегу:
App.vuedata()
{
return {
text: '',
}
}
Привяжем свойство к тегу и сделаем абзац, в который будет выводиться вводимый текст:
App.vue<template>
<textarea v-model="text"></textarea>
<p>{{ text }}</p>
</template>
Работа с checkbox
Давайте теперь посмотрим, как происходит работа с checkbox. Пусть у нас есть следующий переключатель:
App.vue<template>
<input type="checkbox" v-model="checked">
</template>
Сделаем свойство checked, которое будет управлять работой этого checkbox:
App.vuedata()
{
return {
checked: true,
}
}
Если checkbox отмечен — свойство checked будет иметь значение true, а если не отмечен — то false. Чтобы убедится в этом, можно вывести значение свойства на экран:
App.vue<template>
<input type="checkbox" v-model="checked">
<p>{{ checked }}</p>
</template>
С помощью тернарного оператора можно выводить что-нибудь более осмысленное:
App.vue<template>
<input type="checkbox" v-model="checked">
<p>{{ checked ? 'yes' : 'no' }}</p>
</template>
Массив значений
Пусть у нас есть группа checkbox. Можно сделать так, чтобы значение атрибутов value всех отмеченных чекбоксов складывалось в массив. Для этого нужно к v-model этих checkbox привязать массив. Давайте сделаем это. Объявим свойство с массивом:
App.vuedata()
{
return {
arr: [],
}
}
Привяжем этот массив к группе checkbox:
App.vue<template>
<input type="checkbox" v-model="arr" value="v1">
<input type="checkbox" v-model="arr" value="v2">
<input type="checkbox" v-model="arr" value="v3">
</template>
Работа с radio
Работа с radio происходит аналогичным образом. Давайте посмотрим на практике. Для начала сделаем свойство choice, которое мы будем привязывать к группе radio:
App.vuedata()
{
return {
choice: '',
}
}
Сделаем теперь группу radio, напишем каждой из них директиву v-model и привяжем к ней свойство choice. Дадим также каждой из них свой value:
App.vue<template>
<input name="radio" type="radio"
v-model="choice"
value="v1">
<input name="radio" type="radio"
v-model="choice"
value="v2">
<input name="radio" type="radio"
v-model="choice"
value="v3">
</template>
Теперь в свойстве choice всегда будет лежать value отмеченного radio:
App.vue<template>
you choosed: {{ choice }}
</template>
Работа с select
Работа с select осуществляется аналогично — на тег вешается атрибут v-model, к нему привязывается свойство объекта data. В это свойство будет попадать текст выбранного тега option.
Следующий код демонстрирует пример работы выпадающего списка:
App.vuedata()
{
return {
// значение по умолчанию
selected: 'value1',
}
}
App.vue<template>
<select v-model="selected">
<option>value1</option>
<option>value2</option>
<option>value3</option>
</select>
<p>{{ selected }}</p>
</template>
Формирование select в цикле
Теги option можно также создавать не в ручную, а с помощью цикла:
App.vuedata()
{
return {
selected: 'value1',
options: ['value1', 'value2', 'value3'],
}
}
App.vue<template>
<select v-model="selected">
<option v-for="option in options">{{ option }}</option>
</select>
<p>{{ selected }}</p>
</template>