Компонент v-tabs в библиотеке Vuetify используется для создания многоуровневых интерфейсов с переключаемыми вкладками. Он позволяет организовать контент в логические секции, которые удобно отображать и скрывать в зависимости от выбора пользователя. Основными элементами системы вкладок являются:
Простейшая структура выглядит следующим образом:
<v-tabs v-model="activeTab">
<v-tab>Вкладка 1</v-tab>
<v-tab>Вкладка 2</v-tab>
<v-tab>Вкладка 3</v-tab>
</v-tabs>
<v-tabs-items v-model="activeTab">
<v-tab-item>Контент вкладки 1</v-tab-item>
<v-tab-item>Контент вкладки 2</v-tab-item>
<v-tab-item>Контент вкладки 3</v-tab-item>
</v-tabs-items>
Здесь v-model связывает активную вкладку с
переменной activeTab во Vue-компоненте, обеспечивая
реактивное обновление контента при переключении.
v-tabs поддерживает несколько способов управления активной вкладкой:
Пример динамического управления вкладками:
<script setup>
import { ref } from 'vue'
const activeTab = ref(0)
function goToNextTab() {
if (activeTab.value < 2) activeTab.value++
}
</script>
<v-tabs v-model="activeTab">
<v-tab>Вкладка 1</v-tab>
<v-tab>Вкладка 2</v-tab>
<v-tab>Вкладка 3</v-tab>
</v-tabs>
<v-tabs-items v-model="activeTab">
<v-tab-item>Контент 1</v-tab-item>
<v-tab-item>Контент 2</v-tab-item>
<v-tab-item>Контент 3</v-tab-item>
</v-tabs-items>
<v-btn @click="goToNextTab">Следующая вкладка</v-btn>
Для точной привязки вкладок к контенту можно использовать props: value в v-tab и v-tab-item. Это особенно полезно при динамически формируемых вкладках:
<v-tabs v-model="activeTab">
<v-tab value="home">Главная</v-tab>
<v-tab value="profile">Профиль</v-tab>
<v-tab value="settings">Настройки</v-tab>
</v-tabs>
<v-tabs-items v-model="activeTab">
<v-tab-item value="home">Контент главной</v-tab-item>
<v-tab-item value="profile">Контент профиля</v-tab-item>
<v-tab-item value="settings">Контент настроек</v-tab-item>
</v-tabs-items>
Такой подход позволяет не зависеть от порядка элементов и легко управлять вкладками динамически.
v-tabs поддерживает широкие возможности кастомизации:
Пропсы для внешнего вида:
background-color – цвет фона панели вкладок.color – цвет активной вкладки.slider-color – цвет индикатора активной вкладки.grow – равномерное растягивание вкладок по ширине.vertical – вертикальное расположение вкладок.Кастомные компоненты внутри вкладок: Можно использовать иконки, текст, аватары, комбинировать с v-icon, v-badge и другими элементами:
<v-tabs v-model="activeTab" background-color="primary" color="white" slider-color="yellow">
<v-tab>
<v-icon left>mdi-home</v-icon>
Главная
</v-tab>
<v-tab>
<v-icon left>mdi-account</v-icon>
Профиль
</v-tab>
</v-tabs>
v-tabs, v-tab, v-tab-item
позволяют добавлять кастомные стили через scoped CSS или Tailwind.Для создания динамических вкладок данные часто хранятся в массиве:
<script setup>
import { ref } from 'vue'
const tabs = ref([
{ title: 'Главная', content: 'Контент главной' },
{ title: 'Профиль', content: 'Контент профиля' },
{ title: 'Настройки', content: 'Контент настроек' }
])
const activeTab = ref(0)
</script>
<v-tabs v-model="activeTab">
<v-tab v-for="(tab, index) in tabs" :key="index">{{ tab.title }}</v-tab>
</v-tabs>
<v-tabs-items v-model="activeTab">
<v-tab-item v-for="(tab, index) in tabs" :key="index">{{ tab.content }}</v-tab-item>
</v-tabs-items>
Такой подход обеспечивает полную реактивность и позволяет легко добавлять, удалять или изменять вкладки.
v-tabs автоматически поддерживает адаптивность:
show-arrows отображает стрелки прокрутки для
навигации.<v-tabs v-model="activeTab" show-arrows scrollable>
<v-tab v-for="tab in 10" :key="tab">Вкладка {{ tab }}</v-tab>
</v-tabs>
Можно связать вкладки с маршрутизатором, используя to:
<v-tabs>
<v-tab to="/home">Главная</v-tab>
<v-tab to="/profile">Профиль</v-tab>
<v-tab to="/settings">Настройки</v-tab>
</v-tabs>
Активная вкладка будет автоматически соответствовать текущему маршруту, что упрощает навигацию в SPA.
lazy у v-tab-item загружается контент
только при первом открытии вкладки, что экономит ресурсы.@change,
@click для отслеживания переключений вкладок и выполнения
дополнительной логики.<v-tabs v-model="activeTab" @change="onTabChange">
<v-tab>Вкладка 1</v-tab>
<v-tab>Вкладка 2</v-tab>
</v-tabs>
<script setup>
function onTabChange(newValue) {
console.log('Активная вкладка:', newValue)
}
</script>
Эти возможности делают v-tabs мощным инструментом для организации интерфейсов, позволяя создавать как простые панели вкладок, так и сложные динамические структуры с полной кастомизацией и интеграцией с маршрутизатором и реактивными данными.