В библиотеке Naive UI переключатели
(n-switch) предоставляют гибкий и мощный механизм для
реализации двоичных состояний, при этом сохраняя высокий уровень
кастомизации. Каждый переключатель представляет собой компонент с
широким набором пропсов, событий и слотов, позволяющих изменять как
визуальное отображение, так и поведение.
Ключевые пропсы для кастомизации:
size – задаёт размер переключателя. Возможные
значения: 'small', 'medium',
'large'.
<n-switch size="large" v-model:value="checked" />loading – добавляет индикатор загрузки вместо
стандартного положения переключателя.
<n-switch :loading="isLoading" v-model:value="checked" />disabled – блокирует взаимодействие с компонентом,
оставляя визуальное отображение активным.
<n-switch :disabled="true" v-model:value="checked" />value / v-model:value – управляет
состоянием переключателя (true или
false).
checked-color и unchecked-color –
позволяют задавать собственные цвета для активного и неактивного
состояния.
<n-switch
v-model:value="checked"
checked-color="#4CAF50"
unchecked-color="#F44336"
/>Эти пропсы обеспечивают базовую визуальную настройку без необходимости изменения CSS напрямую.
Компонент n-switch поддерживает слоты, позволяющие
вставлять собственный контент внутрь переключателя:
checked – слот для отображения кастомного содержимого в
активном состоянии.unchecked – слот для отображения в неактивном
состоянии.Пример:
<n-switch v-model:value="checked">
<template #checked>
<span>Вкл</span>
</template>
<template #unchecked>
<span>Выкл</span>
</template>
</n-switch>
Это особенно полезно для замены стандартного кружка или текста на более сложные иконки, изображения или анимации.
Naive UI предоставляет поддержку CSS-переменных для детальной настройки внешнего вида переключателя без необходимости полностью переопределять стили:
--n-switch-checked-color – цвет фона в активном
состоянии--n-switch-unchecked-color – цвет фона в неактивном
состоянии--n-switch-handle-color – цвет ручки переключателя--n-switch-handle-size – размер ручкиПример использования:
.custom-switch {
--n-switch-checked-color: #1E88E5;
--n-switch-unchecked-color: #B0BEC5;
--n-switch-handle-color: #FFFFFF;
--n-switch-handle-size: 24px;
}
<n-switch class="custom-switch" v-model:value="checked" />
Использование CSS-переменных позволяет создавать уникальные темы, соответствующие стилю приложения, без вмешательства в исходный код компонента.
Переключатели в Naive UI поддерживают анимацию с помощью
CSS-переходов по умолчанию, но можно настроить их с помощью
transition:
.custom-switch {
transition: background-color 0.3s ease, transform 0.2s ease;
}
Также через слоты можно интегрировать анимации для ручки при смене состояния:
<n-switch v-model:value="checked">
<template #checked>
<div class="handle-animation">✔</div>
</template>
</n-switch>
Комбинация слотов и CSS-переменных позволяет создавать плавные, интерактивные переключатели с уникальными эффектами.
Для динамической логики переключателей важно использовать события и методы:
on-update:value – вызывается при изменении состояния
переключателя.
<n-switch v-model:value="checked" @update:value="handleChange" />Программное переключение через v-model:value:
const toggleSwitch = () => {
checked.value = !checked.value;
};Это позволяет связывать переключатель с другими компонентами, состояниями или асинхронными процессами.
Переключатели можно использовать в формах Naive UI
(n-form и n-form-item), обеспечивая корректную
валидацию и интеграцию с данными:
<n-form :model="formData">
<n-form-item label="Активировать" path="enabled">
<n-switch v-model:value="formData.enabled" />
</n-form-item>
</n-form>
С помощью rules можно добавлять кастомную проверку,
например, обязательность включения переключателя для активации
функции.
div или span и управлять переходами через CSS,
избегая прямого вмешательства в DOM переключателя.Такой подход позволяет создавать уникальные интерфейсы, сохраняя при
этом надежность и удобство стандартного n-switch.