Компонент Tabs в библиотеке Element
Plus позволяет создавать интерфейсы с вкладками, обеспечивая
удобную организацию контента и навигации. Он состоит из контейнера
<el-tabs> и отдельных вкладок
<el-tab-pane>.
<template>
<el-tabs v-model="activeTab">
<el-tab-pane label="Первая вкладка" name="first">
Содержимое первой вкладки
</el-tab-pane>
<el-tab-pane label="Вторая вкладка" name="second">
Содержимое второй вкладки
</el-tab-pane>
</el-tabs>
</template>
<script>
export default {
data() {
return {
activeTab: 'first'
}
}
}
</script>
v-model связывает активную вкладку с переменной
activeTab.label задаёт заголовок вкладки.name используется для идентификации вкладки при
программной смене.Для динамического управления вкладками используются методы Element Plus, а также реактивные переменные Vue.
<template>
<el-tabs v-model="activeTab" @tab-click="handleTabClick">
<el-tab-pane
v-for="tab in tabs"
:key="tab.name"
:label="tab.label"
:name="tab.name"
>
{{ tab.content }}
</el-tab-pane>
</el-tabs>
</template>
<script>
export default {
data() {
return {
activeTab: 'tab1',
tabs: [
{ name: 'tab1', label: 'Вкладка 1', content: 'Содержимое 1' },
{ name: 'tab2', label: 'Вкладка 2', content: 'Содержимое 2' }
]
}
},
methods: {
handleTabClick(tab) {
console.log('Активная вкладка:', tab.name)
}
}
}
</script>
Особенности:
v-for позволяет динамически создавать
вкладки.@tab-click срабатывает при клике на вкладку,
передавая объект вкладки с полями name и
label.По умолчанию вкладки отображаются горизонтально. Для вертикальной
ориентации используется атрибут tab-position="left" или
"right".
<el-tabs v-model="activeTab" tab-position="left">
<el-tab-pane label="Панель A" name="a">Контент A</el-tab-pane>
<el-tab-pane label="Панель B" name="b">Контент B</el-tab-pane>
</el-tabs>
tab-position может принимать значения:
"top", "right", "bottom",
"left".Для сложных интерфейсов часто требуется добавление и удаление вкладок
на лету. Это реализуется через массив данных и реактивное управление
v-model.
<template>
<el-button @click="addTab">Добавить вкладку</el-button>
<el-tabs v-model="activeTab" type="card" closable @tab-remove="removeTab">
<el-tab-pane
v-for="tab in tabs"
:key="tab.name"
:label="tab.label"
:name="tab.name"
closable
>
{{ tab.content }}
</el-tab-pane>
</el-tabs>
</template>
<script>
let id = 3
export default {
data() {
return {
activeTab: 'tab1',
tabs: [
{ name: 'tab1', label: 'Вкладка 1', content: 'Контент 1' },
{ name: 'tab2', label: 'Вкладка 2', content: 'Контент 2' }
]
}
},
methods: {
addTab() {
const newName = `tab${id}`
this.tabs.push({ name: newName, label: `Вкладка ${id}`, content: `Контент ${id}` })
this.activeTab = newName
id++
},
removeTab(targetName) {
this.tabs = this.tabs.filter(tab => tab.name !== targetName)
if (this.activeTab === targetName && this.tabs.length) {
this.activeTab = this.tabs[0].name
}
}
}
}
</script>
type="card" задаёт стиль вкладок с визуально
отделяемыми карточками.closable на вкладке позволяет её закрыть.@tab-remove автоматически передаёт
name удаляемой вкладки.Element Plus предоставляет несколько вариантов кастомизации:
Типы вкладок:
card — карточки с границамиborder-card — карточки с рамкой вокруг контентаdefault — стандартный стиль<el-tabs v-model="activeTab" type="border-card">
<el-tab-pane label="Вкладка 1" name="1">Контент 1</el-tab-pane>
<el-tab-pane label="Вкладка 2" name="2">Контент 2</el-tab-pane>
</el-tabs>
el-tabs__header и el-tab-pane..el-tabs__header {
background-color: #f5f7fa;
}
.el-tab-pane {
padding: 20px;
font-size: 14px;
}
Атрибут lazy позволяет загружать контент вкладки только
при её активации, что улучшает производительность:
<el-tabs v-model="activeTab" lazy>
<el-tab-pane label="Вкладка A" name="a">
Данные загружаются при первом открытии
</el-tab-pane>
<el-tab-pane label="Вкладка B" name="b">
Статический контент
</el-tab-pane>
</el-tabs>
lazy содержимое не рендерится до
первого клика по вкладке.Можно синхронизировать вкладки с маршрутизатором Vue, используя
v-model и отслеживание изменений маршрута:
watch: {
$route(to) {
this.activeTab = to.query.tab || 'tab1'
}
}
Вкладки могут содержать иконки и подсказки, что особенно полезно при ограниченном пространстве:
<el-tabs v-model="activeTab">
<el-tab-pane
label="Настройки"
name="settings"
:tooltip="'Откройте панель настроек'"
>
Контент панели настроек
</el-tab-pane>
<el-tab-pane
label="Профиль"
name="profile"
>
<i class="el-icon-user"></i> Контент профиля
</el-tab-pane>
</el-tabs>
tooltip задаёт всплывающую подсказку при
наведении.el-icon-*) или сторонние иконки.Этот набор возможностей делает компонент Tabs гибким инструментом для организации интерфейсов в Element Plus, позволяя создавать как простые горизонтальные вкладки, так и динамичные, стилизованные и интегрированные с роутером интерфейсы.