v-btn-toggle — это компонент Vuetify, предназначенный
для группировки кнопок v-btn таким образом, чтобы они
работали как переключатели. Он позволяет создавать
радио-подобные группы кнопок или множественные выборы с
поддержкой v-model, что делает его удобным инструментом для
управления состояниями интерфейса.
<v-btn-toggle v-model="selected">
<v-btn value="left">Лево</v-btn>
<v-btn value="center">Центр</v-btn>
<v-btn value="right">Право</v-btn>
</v-btn-toggle>
В этом примере v-model связывает выбранную кнопку с
переменной selected. Значение кнопки определяется через
атрибут value. При выборе кнопки переменная автоматически
обновляется.
Одновыборный режим (по умолчанию) По умолчанию
v-btn-toggle работает как радио-кнопки — можно выбрать
только одну кнопку из группы.
<v-btn-toggle v-model="alignment">
<v-btn value="left">Лево</v-btn>
<v-btn value="center">Центр</v-btn>
<v-btn value="right">Право</v-btn>
</v-btn-toggle>
Если необходимо разрешить множественный выбор,
используется атрибут multiple. В этом случае
v-model должен быть массивом:
<v-btn-toggle v-model="options" multiple>
<v-btn value="bold">Жирный</v-btn>
<v-btn value="italic">Курсив</v-btn>
<v-btn value="underline">Подчеркнутый</v-btn>
</v-btn-toggle>
Теперь можно выбрать сразу несколько стилей текста, и переменная
options будет содержать массив выбранных значений.
v-btn-toggle поддерживает основные свойства Vuetify
кнопок и дополнительные настройки:
mandatory — обязательный выбор. При
включенном свойстве нельзя снять выбор полностью, всегда будет выбрана
одна кнопка.mandatory + multiple — не
имеет смысла, так как множественный выбор позволяет оставить массив
пустым.rounded — скругленные углы
кнопок.density — управляет размером и
плотностью кнопок (default, comfortable,
compact).variant — применяет один из стилей
outlined, text, elevated,
tonal к группе кнопок.Пример с кастомным стилем:
<v-btn-toggle v-model="alignment" variant="outlined" density="compact" rounded>
<v-btn value="left">Лево</v-btn>
<v-btn value="center">Центр</v-btn>
<v-btn value="right">Право</v-btn>
</v-btn-toggle>
По умолчанию кнопки располагаются горизонтально. Для вертикальной
ориентации используется direction="vertical":
<v-btn-toggle v-model="alignment" direction="vertical">
<v-btn value="top">Вверх</v-btn>
<v-btn value="middle">Центр</v-btn>
<v-btn value="bottom">Вниз</v-btn>
</v-btn-toggle>
Это удобно для панелей инструментов или боковых меню, где требуется вертикальный набор переключателей.
v-btn-toggle полностью интегрируется с
v-model, что позволяет управлять выбором через переменные в
компоненте.
<script setup>
import { ref } from 'vue'
const alignment = ref('center')
// Программная смена выбора
function selectLeft() {
alignment.value = 'left'
}
</script>
<v-btn @click="selectLeft">Выбрать Лево</v-btn>
<v-btn-toggle v-model="alignment">
<v-btn value="left">Лево</v-btn>
<v-btn value="center">Центр</v-btn>
<v-btn value="right">Право</v-btn>
</v-btn-toggle>
После клика на внешнюю кнопку состояние переключателя обновится автоматически, что удобно для реактивного интерфейса.
v-btn-toggle позволяет создавать кнопки из массивов
данных через v-for, сохраняя полную функциональность
выбора:
<script setup>
import { ref } from 'vue'
const options = ref(['Лево', 'Центр', 'Право'])
const selected = ref('Центр')
</script>
<v-btn-toggle v-model="selected">
<v-btn v-for="option in options" :key="option" :value="option">
{{ option }}
</v-btn>
</v-btn-toggle>
Таким образом можно динамически строить группы кнопок, например, для панелей инструментов или фильтров.
v-btn-toggle может использоваться внутри
v-form как интерактивный элемент для выбора значения.
Атрибуты rules позволяют проверять состояние:
<v-form ref="form" v-model="valid">
<v-btn-toggle v-model="alignment" :mandatory="true" :rules="[v => !!v || 'Выберите вариант']">
<v-btn value="left">Лево</v-btn>
<v-btn value="center">Центр</v-btn>
<v-btn value="right">Право</v-btn>
</v-btn-toggle>
</v-form>
Если пользователь не выбрал вариант, форма не будет считаться валидной, что обеспечивает контроль над обязательными полями.
v-btn-toggle поддерживает стандартные события Vue:
@update:model-value — срабатывает при
изменении выбранного значения.@change — альтернатива для
отслеживания изменений.<v-btn-toggle v-model="alignment" @update:model-value="onChange">
<v-btn value="left">Лево</v-btn>
<v-btn value="center">Центр</v-btn>
<v-btn value="right">Право</v-btn>
</v-btn-toggle>
<script setup>
function onChange(value) {
console.log('Выбрано:', value)
}
</script>
Это позволяет легко синхронизировать выбор с другими компонентами или отправлять данные на сервер.
v-btn-toggle наследует тему Vuetify и поддерживает
цветовые схемы через свойства color и
theme.
<v-btn-toggle v-model="alignment" color="primary" variant="tonal">
<v-btn value="left">Лево</v-btn>
<v-btn value="center">Центр</v-btn>
<v-btn value="right">Право</v-btn>
</v-btn-toggle>
Цвет применяется ко всей группе и отдельным кнопкам, обеспечивая единый стиль интерфейса без дополнительной кастомизации CSS.
v-btn-toggle поддерживает кнопки с иконками, что
особенно полезно для панелей инструментов:
<v-btn-toggle v-model="selectedIcon">
<v-btn value="bold">
<v-icon>mdi-format-bold</v-icon>
</v-btn>
<v-btn value="italic">
<v-icon>mdi-format-italic</v-icon>
</v-btn>
<v-btn value="underline">
<v-icon>mdi-format-underline</v-icon>
</v-btn>
</v-btn-toggle>
Можно комбинировать текст и иконки для наглядного интерфейса управления форматированием или выбора инструментов.
Эти возможности делают v-btn-toggle гибким инструментом
для создания интерактивных, реактивных и визуально согласованных
элементов управления в приложениях на Vuetify.