vue 实现tab页
实现 Tab 页的基本方法
在 Vue 中实现 Tab 页可以通过动态组件或条件渲染完成。以下是两种常见的方法:
动态组件方式
使用 <component :is="currentTabComponent"> 动态切换组件,结合 v-for 渲染标签栏:

<template>
<div>
<div class="tabs">
<button
v-for="tab in tabs"
:key="tab.name"
@click="currentTab = tab"
:class="{ active: currentTab === tab }"
>
{{ tab.name }}
</button>
</div>
<component :is="currentTab.component" />
</div>
</template>
<script>
export default {
data() {
return {
currentTab: null,
tabs: [
{ name: 'Home', component: 'HomeComponent' },
{ name: 'About', component: 'AboutComponent' }
]
};
},
created() {
this.currentTab = this.tabs[0];
}
};
</script>
条件渲染方式
通过 v-if 或 v-show 控制内容显示:
<template>
<div>
<div class="tabs">
<button
v-for="tab in tabs"
:key="tab"
@click="activeTab = tab"
:class="{ active: activeTab === tab }"
>
{{ tab }}
</button>
</div>
<div v-show="activeTab === 'Home'">Home Content</div>
<div v-show="activeTab === 'About'">About Content</div>
</div>
</template>
<script>
export default {
data() {
return {
activeTab: 'Home',
tabs: ['Home', 'About']
};
}
};
</script>
使用 Vue Router 实现 Tab 页
对于需要 URL 同步的 Tab 页,推荐结合 Vue Router:

<template>
<div>
<router-link
v-for="tab in tabs"
:key="tab.path"
:to="tab.path"
active-class="active"
>
{{ tab.name }}
</router-link>
<router-view />
</div>
</template>
<script>
export default {
data() {
return {
tabs: [
{ name: 'Home', path: '/home' },
{ name: 'About', path: '/about' }
]
};
}
};
</script>
第三方库推荐
对于复杂需求,可以使用以下库简化开发:
- Vuetify:提供
v-tabs组件,内置动画和响应式支持。 - Element UI:
el-tabs组件支持卡片化标签和懒加载。 - BootstrapVue:
b-tabs集成 Bootstrap 样式。
示例(Vuetify):
<template>
<v-tabs v-model="currentTab">
<v-tab v-for="tab in tabs" :key="tab">{{ tab }}</v-tab>
<v-tab-item v-for="tab in tabs" :key="tab">
<div>{{ tab }} Content</div>
</v-tab-item>
</v-tabs>
</template>
关键注意事项
- 性能优化:频繁切换的 Tab 内容建议用
v-show避免重复渲染,静态内容可用v-if。 - 状态保持:使用
<keep-alive>包裹动态组件可保留组件状态:<keep-alive> <component :is="currentTab.component" /> </keep-alive> - 响应式设计:通过 CSS 媒体查询调整标签栏布局,移动端可考虑滑动切换。






