vue实现tab
Vue 实现 Tab 切换的几种方法
使用动态组件(<component>)实现 Tab
通过 Vue 的 is 特性动态切换组件,结合 v-for 渲染标签页标题:
<template>
<div>
<div class="tabs">
<button
v-for="(tab, index) in tabs"
:key="index"
@click="currentTab = tab.component"
:class="{ active: currentTab === tab.component }"
>
{{ tab.name }}
</button>
</div>
<component :is="currentTab" />
</div>
</template>
<script>
import Tab1 from './Tab1.vue'
import Tab2 from './Tab2.vue'
export default {
components: { Tab1, Tab2 },
data() {
return {
currentTab: 'Tab1',
tabs: [
{ name: 'Tab 1', component: 'Tab1' },
{ name: 'Tab 2', component: 'Tab2' }
]
}
}
}
</script>
<style>
.active {
background-color: #42b983;
color: white;
}
</style>
使用条件渲染(v-if/v-show)实现
通过控制显示隐藏实现简单 Tab 切换:
<template>
<div>
<div class="tab-buttons">
<button
v-for="(tab, index) in tabs"
:key="index"
@click="activeTab = index"
:class="{ active: activeTab === index }"
>
{{ tab }}
</button>
</div>
<div class="tab-content">
<div v-show="activeTab === 0">Content 1</div>
<div v-show="activeTab === 1">Content 2</div>
<div v-show="activeTab === 2">Content 3</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
activeTab: 0,
tabs: ['Tab 1', 'Tab 2', 'Tab 3']
}
}
}
</script>
使用第三方库(如 Element UI)
使用 UI 框架提供的现成 Tab 组件:
<template>
<el-tabs v-model="activeTab">
<el-tab-pane label="用户管理" name="user">
用户管理内容
</el-tab-pane>
<el-tab-pane label="配置管理" name="config">
配置管理内容
</el-tab-pane>
</el-tabs>
</template>
<script>
export default {
data() {
return {
activeTab: 'user'
}
}
}
</script>
使用 Vue Router 实现路由级 Tab
通过路由切换实现更复杂的 Tab 场景:

// router.js
const routes = [
{ path: '/tab1', component: Tab1 },
{ path: '/tab2', component: Tab2 }
]
<template>
<div>
<router-link
v-for="(tab, index) in tabs"
:key="index"
:to="tab.path"
active-class="active"
>
{{ tab.name }}
</router-link>
<router-view></router-view>
</div>
</template>
注意事项
- 动态组件方式适合完全不同的组件内容切换
v-show只是切换显示隐藏,组件不会销毁重建v-if会触发组件的销毁和重建,适合需要重置状态的场景- 路由方式适合需要保持浏览器历史记录的复杂应用
样式优化建议
- 添加过渡动画增强用户体验
- 使用 CSS 变量管理主题色
- 移动端考虑手势滑动切换
- 添加懒加载优化性能






