v-radio — элемент выбора из группы, позволяющий отметить
только один вариант из нескольких. В интерфейсах он применяется в
ситуациях, когда необходимо обеспечить взаимоисключающий
выбор. Радиокнопки в Vuetify работают в составе контейнера
v-radio-group, который управляет состоянием выбранного
значения.
Основная особенность радиокнопок заключается в том, что активным может быть только один элемент в группе. Выбор другого автоматически снимает предыдущий.
Минимальная конфигурация включает контейнер
v-radio-group и несколько элементов
v-radio.
<template>
<v-radio-group v-model="choice">
<v-radio label="Первый вариант" value="one"></v-radio>
<v-radio label="Второй вариант" value="two"></v-radio>
<v-radio label="Третий вариант" value="three"></v-radio>
</v-radio-group>
</template>
<script>
export default {
data() {
return {
choice: null
}
}
}
</script>
Ключевые элементы:
| Свойство | Описание |
|---|---|
v-radio-group |
Контейнер для радиокнопок |
v-model |
Переменная состояния выбранного значения |
label |
Текстовое описание варианта |
value |
Значение, присваиваемое при выборе |
После выбора одного из вариантов переменная choice будет
содержать соответствующее значение.
v-modelv-radio-group использует двустороннюю привязку
данных.
<v-radio-group v-model="gender">
<v-radio label="Мужской" value="male"></v-radio>
<v-radio label="Женский" value="female"></v-radio>
</v-radio-group>
data() {
return {
gender: "male"
}
}
В этом случае радиокнопка “Мужской” будет выбрана по умолчанию.
Механизм работы:
v-model хранит текущее значение.value записывается в
переменную.v-radiolabelОтображает подпись рядом с радиокнопкой.
<v-radio label="Вариант выбора"></v-radio>
valueОпределяет значение, которое будет записано в
v-model.
<v-radio label="Пункт A" value="A"></v-radio>
Значением может быть:
disabledОтключает возможность выбора.
<v-radio
label="Недоступный вариант"
value="disabled"
disabled
></v-radio>
Такой элемент отображается в интерфейсе, но пользователь не может его выбрать.
colorПозволяет изменить цвет активного состояния.
<v-radio
label="Зелёный вариант"
value="green"
color="green"
></v-radio>
Поддерживаются цвета из системы тем Vuetify:
v-radio-groupКонтейнер управляет поведением всей группы.
columnОтображает элементы вертикально (по умолчанию).
<v-radio-group v-model="option" column>
rowГоризонтальное расположение радиокнопок.
<v-radio-group v-model="option" row>
<v-radio label="A" value="a"></v-radio>
<v-radio label="B" value="b"></v-radio>
</v-radio-group>
Используется для компактных интерфейсов.
mandatoryЗапрещает отсутствие выбранного значения.
<v-radio-group v-model="type" mandatory>
Если свойство включено:
disabledБлокирует всю группу.
<v-radio-group v-model="option" disabled>
Все радиокнопки внутри становятся неактивными.
nameИспользуется для интеграции с HTML-формами.
<v-radio-group v-model="plan" name="subscription">
Позволяет корректно отправлять данные формы на сервер.
Контейнер v-radio-group поддерживает собственную
подпись.
<v-radio-group
v-model="payment"
label="Способ оплаты"
>
<v-radio label="Карта" value="card"></v-radio>
<v-radio label="Наличные" value="cash"></v-radio>
</v-radio-group>
Заголовок отображается над группой элементов.
Компонент поддерживает кастомное содержимое.
<v-radio-group v-model="delivery">
<v-radio value="standard">
<template v-slot:label>
<strong>Стандартная доставка</strong>
</template>
</v-radio>
<v-radio value="express">
<template v-slot:label>
<strong>Экспресс доставка</strong>
</template>
</v-radio>
</v-radio-group>
Это позволяет:
Радиокнопки могут использовать сложные структуры данных.
<v-radio-group v-model="selectedUser">
<v-radio
v-for="user in users"
:key="user.id"
:label="user.name"
:value="user"
></v-radio>
</v-radio-group>
data() {
return {
selectedUser: null,
users: [
{ id: 1, name: "Алексей" },
{ id: 2, name: "Мария" },
{ id: 3, name: "Игорь" }
]
}
}
После выбора переменная selectedUser будет содержать
весь объект пользователя.
v-forЧасто варианты выбора формируются из массива данных.
<v-radio-group v-model="selected">
<v-radio
v-for="item in items"
:key="item.value"
:label="item.label"
:value="item.value"
></v-radio>
</v-radio-group>
data() {
return {
selected: null,
items: [
{ label: "HTML", value: "html" },
{ label: "CSS", value: "css" },
{ label: "JavaScript", value: "js" }
]
}
}
Такой подход:
v-radio-group поддерживает систему правил
(rules), аналогичную другим компонентам форм.
<v-radio-group
v-model="answer"
:rules="[v => !!v || 'Выберите вариант']"
>
<v-radio label="Да" value="yes"></v-radio>
<v-radio label="Нет" value="no"></v-radio>
</v-radio-group>
Если значение не выбрано, отображается сообщение об ошибке.
Радиокнопки часто применяются вместе с компонентом
v-form.
<v-form ref="form">
<v-radio-group
v-model="subscription"
:rules="[v => !!v || 'Выберите тип подписки']"
>
<v-radio label="Базовая" value="basic"></v-radio>
<v-radio label="Премиум" value="premium"></v-radio>
</v-radio-group>
<v-btn @click="submit">Отправить</v-btn>
</v-form>
methods: {
submit() {
this.$refs.form.validate()
}
}
Валидация будет проверять выбран ли вариант.
Vuetify предоставляет несколько параметров визуальной настройки.
densityУменьшает расстояния между элементами.
<v-radio-group v-model="value" density="compact">
class и styleДля тонкой настройки используются стандартные средства Vue.
<v-radio
label="Стилизованный вариант"
value="custom"
class="my-radio"
/>
Изменения можно отслеживать через событие change.
<v-radio-group
v-model="theme"
@change="themeChanged"
>
<v-radio label="Светлая" value="light"></v-radio>
<v-radio label="Тёмная" value="dark"></v-radio>
</v-radio-group>
methods: {
themeChanged(value) {
console.log("Новая тема:", value)
}
}
Форма выбора способа доставки.
<v-radio-group
v-model="deliveryMethod"
label="Способ доставки"
column
>
<v-radio
label="Самовывоз"
value="pickup"
></v-radio>
<v-radio
label="Курьер"
value="courier"
></v-radio>
<v-radio
label="Почта"
value="mail"
></v-radio>
</v-radio-group>
data() {
return {
deliveryMethod: "pickup"
}
}
Интерфейс автоматически:
Радиокнопки используются для выбора одного варианта из фиксированного списка:
Выбор параметров:
Настройки:
Опросы и формы:
v-radio почти всегда используется внутри
v-radio-group.v-model.Благодаря этим возможностям v-radio обеспечивает
создание удобных и предсказуемых интерфейсов выбора с минимальным
количеством кода.