Компонент v-switch библиотеки Vuetify представляет собой интерактивный переключатель, предназначенный для управления булевыми значениями. Он используется в интерфейсах для включения и отключения параметров, настройки функций приложения и изменения состояния различных опций.
Переключатели визуально отображают два состояния:
В отличие от чекбоксов, переключатели ориентированы на быстрое изменение состояния без необходимости подтверждения. Они часто применяются в настройках приложений, формах конфигурации, панелях управления и мобильных интерфейсах.
Компонент v-switch основан на той же логике
управления состоянием, что и другие элементы ввода Vuetify, включая
использование v-model для двустороннего связывания
данных.
Минимальная реализация переключателя требует лишь подключения
v-model, который связывает компонент с реактивным
значением.
<template>
<v-switch v-model="enabled"></v-switch>
</template>
<script>
export default {
data() {
return {
enabled: false
}
}
}
</script>
В этом примере:
enabled хранит текущее состояние переключателя.Когда пользователь активирует переключатель, значение становится
true, при выключении — false.
Для пояснения назначения переключателя используется свойство label.
<v-switch
v-model="notifications"
label="Уведомления"
/>
Подпись отображается рядом с элементом управления и помогает понять назначение настройки.
Подпись может содержать:
Вместо свойства label можно использовать слот
label, позволяющий создавать более сложную разметку.
<v-switch v-model="darkMode">
<template v-slot:label>
<span>Темная тема интерфейса</span>
</template>
</v-switch>
Слоты позволяют:
По умолчанию переключатель работает с булевыми значениями. Однако возможно задать собственные значения при помощи свойств:
true-valuefalse-value<v-switch
v-model="status"
:true-value="'active'"
:false-value="'inactive'"
label="Статус"
/>
В этом случае:
| Состояние | Значение |
|---|---|
| включено | "active" |
| выключено | "inactive" |
Это особенно полезно при интеграции с API, где используются строковые или числовые значения.
Компонент может работать с массивом, добавляя или удаляя элементы из него.
<v-switch
v-model="selectedFeatures"
value="analytics"
label="Аналитика"
/>
data() {
return {
selectedFeatures: []
}
}
Логика работы:
"analytics" добавляется в массивЭтот механизм позволяет использовать переключатели для множественного выбора.
Цвет активного состояния регулируется через свойство color.
<v-switch
v-model="wifi"
label="Wi-Fi"
color="green"
/>
Vuetify поддерживает множество встроенных цветов:
primarysecondarysuccesserrorwarninginfoТакже можно использовать кастомные цвета темы.
Свойство disabled блокирует взаимодействие с компонентом.
<v-switch
v-model="feature"
label="Экспериментальная функция"
disabled
/>
Особенности поведения:
Свойство readonly запрещает изменение состояния пользователем, но визуально компонент остается активным.
<v-switch
v-model="policyAccepted"
label="Политика безопасности"
readonly
/>
Отличие от disabled:
| Свойство | Взаимодействие | Визуальное состояние |
|---|---|---|
| disabled | запрещено | неактивный вид |
| readonly | запрещено | обычный вид |
Свойство inset изменяет визуальное расположение переключателя.
<v-switch
v-model="compact"
label="Компактный режим"
inset
/>
Этот режим делает компонент более компактным и часто применяется в списках настроек.
По умолчанию Vuetify может отображать дополнительные элементы:
Свойство hide-details скрывает эти элементы.
<v-switch
v-model="logging"
label="Журналирование"
hide-details
/>
Это полезно в интерфейсах, где требуется минималистичный дизайн.
Свойство messages выводит текст под переключателем.
<v-switch
v-model="sync"
label="Синхронизация"
messages="Данные будут синхронизироваться автоматически"
/>
Сообщения применяются для:
При использовании форм можно показывать ошибки валидации.
<v-switch
v-model="agreement"
label="Согласие"
:error="hasError"
error-messages="Необходимо подтвердить согласие"
/>
Поведение:
Компонент поддерживает систему rules, используемую во всех полях формы Vuetify.
<v-switch
v-model="terms"
label="Принять условия"
:rules="[v => !!v || 'Необходимо принять условия']"
/>
Массив rules содержит функции проверки.
Если функция возвращает строку, она отображается как сообщение ошибки.
В Vuetify 3 доступно свойство density, позволяющее изменять плотность интерфейса.
<v-switch
v-model="compactMode"
label="Компактный режим"
density="compact"
/>
Доступные варианты:
defaultcomfortablecompactЭтот параметр помогает адаптировать интерфейс под различные устройства.
Переключатель может отображать разные иконки в зависимости от состояния.
<v-switch
v-model="security"
label="Защита"
true-icon="mdi-lock"
false-icon="mdi-lock-open"
/>
Это делает интерфейс более наглядным.
Компонент генерирует события при изменении состояния.
Основное событие:
update:modelValue
Пример обработки:
<v-switch
v-model="enabled"
@update:modelValue="handleChange"
/>
methods: {
handleChange(value) {
console.log("Новое значение:", value)
}
}
Переключатели часто применяются в составе компонента
v-form.
<v-form ref="form">
<v-switch
v-model="subscribe"
label="Подписка на рассылку"
/>
</v-form>
При вызове form.validate() будут проверяться правила
валидации переключателя.
Переключатели удобно использовать вместе с ref.
<script setup>
import { ref } from 'vue'
const darkTheme = ref(false)
</script>
<template>
<v-switch
v-model="darkTheme"
label="Темная тема"
/>
</template>
ref обеспечивает реактивность состояния.
Несколько переключателей можно объединять для управления набором настроек.
<v-switch
v-model="settings.notifications"
label="Уведомления"
/>
<v-switch
v-model="settings.autoSave"
label="Автосохранение"
/>
<v-switch
v-model="settings.analytics"
label="Сбор аналитики"
/>
data() {
return {
settings: {
notifications: true,
autoSave: false,
analytics: false
}
}
}
Такой подход упрощает структуру данных настроек.
Часто настройки формируются из массива конфигурации.
<v-switch
v-for="option in options"
:key="option.key"
v-model="option.value"
:label="option.label"
/>
data() {
return {
options: [
{ key: 1, label: "Звук", value: true },
{ key: 2, label: "Уведомления", value: false },
{ key: 3, label: "Автообновление", value: true }
]
}
}
Такой подход используется при генерации интерфейсов настроек.
Переключатели часто используются в интерфейсах конфигурации. Для удобства восприятия рекомендуется:
Компонент v-switch широко используется в интерфейсах:
Настройки приложения
Темная тема
Уведомления
Автосохранение
Функции системы
Режим разработчика
Журналирование
Отладка
Параметры пользователя
Публичный профиль
Получать письма
Разрешить геолокацию
Если требуется выбрать один вариант из нескольких, следует использовать:
v-radio-groupДля множественного выбора более подходит:
v-checkboxПереключатель предназначен исключительно для включения или выключения функции.
Без подписи пользователю может быть непонятно назначение переключателя.
Плохой пример:
[ переключатель ]
Хороший пример:
[ переключатель ] Автоматическое обновление
Большое количество переключателей на одной странице ухудшает восприятие. В таких случаях рекомендуется:
v-card)v-list)Переключатели могут напрямую управлять состоянием глобального хранилища.
Пример с Pinia:
<v-switch
v-model="settingsStore.darkMode"
label="Темная тема"
/>
Таким образом изменение состояния сразу отражается во всей системе приложения.
Переключатель соответствует паттернам Material Design и используется для управления мгновенными настройками. Его ключевые особенности:
Благодаря этим свойствам компонент v-switch является одним из основных элементов пользовательских интерфейсов, реализованных с использованием библиотеки Vuetify.