vue 实现tab
实现 Vue Tab 的步骤
使用动态组件实现 Tab
在 Vue 中可以通过动态组件 <component :is="currentTab"> 来实现 Tab 切换效果。定义多个组件,并通过 currentTab 变量控制当前显示的组件。
<template>
<div>
<button @click="currentTab = 'Tab1'">Tab 1</button>
<button @click="currentTab = 'Tab2'">Tab 2</button>
<component :is="currentTab"></component>
</div>
</template>
<script>
import Tab1 from './Tab1.vue';
import Tab2 from './Tab2.vue';
export default {
components: { Tab1, Tab2 },
data() {
return {
currentTab: 'Tab1'
};
}
};
</script>
使用 v-if 或 v-show 控制显示
另一种方式是通过 v-if 或 v-show 控制不同 Tab 内容的显示。v-if 会销毁和重建 DOM,而 v-show 仅切换 CSS 的 display 属性。
<template>
<div>
<button @click="activeTab = 'tab1'">Tab 1</button>
<button @click="activeTab = 'tab2'">Tab 2</button>
<div v-if="activeTab === 'tab1'">Content for Tab 1</div>
<div v-if="activeTab === 'tab2'">Content for Tab 2</div>
</div>
</template>
<script>
export default {
data() {
return {
activeTab: 'tab1'
};
}
};
</script>
使用第三方库(如 Element UI)
如果项目中使用 UI 框架(如 Element UI),可以直接使用其提供的 Tab 组件,简化开发。
<template>
<el-tabs v-model="activeTab">
<el-tab-pane label="Tab 1" name="tab1">Content 1</el-tab-pane>
<el-tab-pane label="Tab 2" name="tab2">Content 2</el-tab-pane>
</el-tabs>
</template>
<script>
export default {
data() {
return {
activeTab: 'tab1'
};
}
};
</script>
动态生成 Tab 列表
如果需要动态生成 Tab(如从 API 获取数据),可以通过 v-for 循环渲染 Tab 按钮和内容。
<template>
<div>
<button
v-for="tab in tabs"
:key="tab.id"
@click="activeTab = tab.id"
>
{{ tab.name }}
</button>
<div v-for="tab in tabs" :key="tab.id">
<div v-if="activeTab === tab.id">{{ tab.content }}</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
activeTab: 'tab1',
tabs: [
{ id: 'tab1', name: 'Tab 1', content: 'Content 1' },
{ id: 'tab2', name: 'Tab 2', content: 'Content 2' }
]
};
}
};
</script>
添加过渡动画
通过 Vue 的 <transition> 组件可以为 Tab 切换添加动画效果,提升用户体验。

<template>
<div>
<button @click="activeTab = 'tab1'">Tab 1</button>
<button @click="activeTab = 'tab2'">Tab 2</button>
<transition name="fade" mode="out-in">
<div v-if="activeTab === 'tab1'" key="tab1">Content 1</div>
<div v-else key="tab2">Content 2</div>
</transition>
</div>
</template>
<style>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
</style>






