vue实现页面tab
Vue 实现页面 Tab 的方法
使用动态组件 <component :is>
通过 Vue 的 is 特性动态切换组件,结合 v-for 渲染标签页标题,利用 currentTab 控制当前显示内容。

<template>
<div>
<div class="tabs">
<button
v-for="tab in tabs"
:key="tab.name"
@click="currentTab = tab.name"
:class="{ active: currentTab === tab.name }"
>
{{ tab.label }}
</button>
</div>
<component :is="currentTab" class="tab-content"></component>
</div>
</template>
<script>
import Tab1 from './Tab1.vue';
import Tab2 from './Tab2.vue';
export default {
components: { Tab1, Tab2 },
data() {
return {
currentTab: 'Tab1',
tabs: [
{ name: 'Tab1', label: '标签页1' },
{ name: 'Tab2', label: '标签页2' }
]
};
}
};
</script>
<style>
.tabs button.active {
border-bottom: 2px solid #42b983;
}
.tab-content {
padding: 20px;
}
</style>
使用路由嵌套实现 Tab
通过 Vue Router 的嵌套路由和 <router-view> 实现标签页,适合需要 URL 同步的场景。

// router.js
const routes = [
{
path: '/',
component: Layout,
children: [
{ path: 'tab1', component: Tab1 },
{ path: 'tab2', component: Tab2 }
]
}
];
<!-- Layout.vue -->
<template>
<div>
<router-link to="/tab1">标签页1</router-link>
<router-link to="/tab2">标签页2</router-link>
<router-view></router-view>
</div>
</template>
使用第三方库
若需复杂功能(如拖拽排序、动画),可集成如 element-ui 的 el-tabs 组件:
<template>
<el-tabs v-model="activeTab">
<el-tab-pane label="标签页1" name="tab1">内容1</el-tab-pane>
<el-tab-pane label="标签页2" name="tab2">内容2</el-tab-pane>
</el-tabs>
</template>
<script>
export default {
data() {
return { activeTab: 'tab1' };
}
};
</script>
状态管理优化
当 Tab 内容需跨组件共享状态时,可通过 Vuex 管理当前激活的标签页:
// store.js
export default new Vuex.Store({
state: { currentTab: 'Tab1' },
mutations: {
setTab(state, tabName) {
state.currentTab = tabName;
}
}
});
<button @click="$store.commit('setTab', 'Tab1')">切换到Tab1</button>






