vue实现tab标签
Vue 实现 Tab 标签
Vue 实现 Tab 标签可以通过动态组件或条件渲染完成。以下是两种常见方法:
动态组件实现
通过 component 动态切换组件,结合 v-for 渲染标签栏:
<template>
<div>
<div class="tabs">
<button
v-for="tab in tabs"
:key="tab.name"
@click="currentTab = tab.component"
:class="{ active: currentTab === tab.component }"
>
{{ tab.name }}
</button>
</div>
<component :is="currentTab" />
</div>
</template>
<script>
export default {
data() {
return {
currentTab: 'Tab1Content',
tabs: [
{ name: 'Tab 1', component: 'Tab1Content' },
{ name: 'Tab 2', component: 'Tab2Content' }
]
}
},
components: {
Tab1Content: { template: '<div>Content 1</div>' },
Tab2Content: { template: '<div>Content 2</div>' }
}
}
</script>
<style>
.tabs button.active {
background: #ddd;
}
</style>
条件渲染实现
使用 v-if/v-show 控制内容显示:
<template>
<div>
<div class="tabs">
<button
v-for="tab in tabs"
:key="tab.id"
@click="activeTab = tab.id"
:class="{ active: activeTab === tab.id }"
>
{{ tab.name }}
</button>
</div>
<div v-if="activeTab === 1">
Content for Tab 1
</div>
<div v-else-if="activeTab === 2">
Content for Tab 2
</div>
</div>
</template>
<script>
export default {
data() {
return {
activeTab: 1,
tabs: [
{ id: 1, name: 'Tab 1' },
{ id: 2, name: 'Tab 2' }
]
}
}
}
</script>
使用第三方库
如需更复杂功能,可考虑以下库:
vue-tabs-component:提供预置样式和动画bootstrap-vue的b-tabs组件element-ui的el-tabs组件
安装示例(以 element-ui 为例):
npm install element-ui
使用示例:
<template>
<el-tabs v-model="activeName">
<el-tab-pane label="Tab 1" name="first">Content 1</el-tab-pane>
<el-tab-pane label="Tab 2" name="second">Content 2</el-tab-pane>
</el-tabs>
</template>
<script>
export default {
data() {
return {
activeName: 'first'
}
}
}
</script>
注意事项
- 动态组件需提前注册所有可能用到的组件
v-if会销毁组件实例,v-show仅切换 CSS 显示- 移动端场景可结合
swiper实现滑动切换 - 需要 URL 同步时可配合
vue-router的哈希模式







