vue实现页面tab
Vue 实现页面 Tab 的方法
使用动态组件和 v-for 渲染
在 Vue 中可以通过动态组件结合 v-for 实现 Tab 切换功能。定义一个数组存储 Tab 信息,使用 v-for 渲染 Tab 标题,通过 v-bind:is 动态切换组件。
<template>
<div>
<div class="tabs">
<button
v-for="(tab, index) in tabs"
:key="index"
@click="currentTab = tab.component"
:class="{ active: currentTab === tab.component }"
>
{{ tab.title }}
</button>
</div>
<component :is="currentTab" />
</div>
</template>
<script>
import Tab1 from './Tab1.vue';
import Tab2 from './Tab2.vue';
export default {
data() {
return {
tabs: [
{ title: 'Tab 1', component: Tab1 },
{ title: 'Tab 2', component: Tab2 }
],
currentTab: Tab1
};
},
components: { Tab1, Tab2 }
};
</script>
<style>
.tabs button.active {
background-color: #42b983;
color: white;
}
</style>
使用 Vue Router 实现路由级 Tab
对于需要 URL 同步的 Tab,可以使用 Vue Router 的嵌套路由或动态路由。每个 Tab 对应一个路由路径,切换时更新 URL。
<template>
<div>
<router-link
v-for="tab in tabs"
:key="tab.path"
:to="tab.path"
active-class="active"
>
{{ tab.title }}
</router-link>
<router-view></router-view>
</div>
</template>
<script>
export default {
data() {
return {
tabs: [
{ title: 'Home', path: '/' },
{ title: 'About', path: '/about' }
]
};
}
};
</script>
使用第三方库
如果需要更丰富的功能(如动画、拖拽排序),可以使用第三方库如 vue-tabs-component 或 element-ui 的 Tab 组件。

安装 element-ui:
npm install element-ui
使用示例:

<template>
<el-tabs v-model="activeTab">
<el-tab-pane label="Tab 1" name="tab1">
Content for Tab 1
</el-tab-pane>
<el-tab-pane label="Tab 2" name="tab2">
Content for Tab 2
</el-tab-pane>
</el-tabs>
</template>
<script>
import { Tabs, TabPane } from 'element-ui';
export default {
components: { ElTabs: Tabs, ElTabPane: TabPane },
data() {
return { activeTab: 'tab1' };
}
};
</script>
状态管理(可选)
对于跨组件共享 Tab 状态,可以使用 Vuex 存储当前激活的 Tab,确保多个组件能同步状态。
// store.js
export default new Vuex.Store({
state: { currentTab: 'tab1' },
mutations: {
setTab(state, tabName) { state.currentTab = tabName; }
}
});
组件内调用:
this.$store.commit('setTab', 'tab2');
注意事项
- 动态组件需提前注册或异步加载。
- 路由方案需配置对应的路由规则。
- 第三方库可能增加包体积,按需引入。






