vue 怎么实现tab
Vue 实现 Tab 的常见方法
方法一:使用动态组件 (<component :is="currentTab">)
通过动态组件切换不同标签页内容,结合 v-for 渲染标签头,利用 v-model 或 data 管理当前选中状态。

<template>
<div>
<div class="tab-header">
<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>
import Tab1 from './Tab1.vue';
import Tab2 from './Tab2.vue';
export default {
data() {
return {
currentTab: 'Tab1',
tabs: [
{ name: '标签1', component: 'Tab1' },
{ name: '标签2', component: 'Tab2' }
]
};
},
components: { Tab1, Tab2 }
};
</script>
<style>
.active {
background-color: #42b983;
color: white;
}
</style>
方法二:条件渲染 (v-if/v-show)
通过 v-if 或 v-show 控制不同标签页的显示隐藏,适合简单场景。

<template>
<div>
<div class="tab-header">
<button @click="currentTab = 'Tab1'" :class="{ active: currentTab === 'Tab1' }">标签1</button>
<button @click="currentTab = 'Tab2'" :class="{ active: currentTab === 'Tab2' }">标签2</button>
</div>
<Tab1 v-if="currentTab === 'Tab1'" />
<Tab2 v-if="currentTab === 'Tab2'" />
</div>
</template>
方法三:使用第三方库 (如 element-ui)
若项目已引入 UI 库(如 Element UI、Ant Design Vue),可直接使用其封装好的 Tab 组件。
<template>
<el-tabs v-model="currentTab">
<el-tab-pane label="标签1" name="Tab1">
<Tab1 />
</el-tab-pane>
<el-tab-pane label="标签2" name="Tab2">
<Tab2 />
</el-tab-pane>
</el-tabs>
</template>
关键注意事项
- 性能优化:频繁切换的标签页建议用
v-show(仅切换 CSS 显示),非频繁切换用v-if(销毁组件)。 - 路由集成:若需通过 URL 管理标签状态,可结合 Vue Router 的嵌套路由或查询参数。
- 动画效果:可通过
<transition>组件为标签切换添加过渡动画。
扩展功能
- 懒加载:结合
defineAsyncComponent实现标签页内容的按需加载。 - 动态标签:通过数组动态生成标签页,支持增删改查操作。






