vue实现tab路由
Vue 实现 Tab 路由的方法
使用 Vue Router 结合动态组件
通过 Vue Router 的路由配置和动态组件切换实现 Tab 路由功能。在路由配置中定义 Tab 对应的组件路径,通过 <router-view> 渲染当前激活的 Tab 内容。
// router/index.js
import Vue from 'vue'
import Router from 'vue-router'
import Tab1 from '@/components/Tab1'
import Tab2 from '@/components/Tab2'
Vue.use(Router)
export default new Router({
routes: [
{ path: '/tab1', component: Tab1 },
{ path: '/tab2', component: Tab2 }
]
})
在父组件中使用 <router-link> 导航到不同 Tab,并通过 <router-view> 显示内容。
<template>
<div>
<router-link to="/tab1">Tab 1</router-link>
<router-link to="/tab2">Tab 2</router-link>
<router-view></router-view>
</div>
</template>
使用 Vue 的 <component> 动态切换
通过 Vue 的 is 属性和动态组件实现 Tab 切换,无需依赖 Vue Router。定义多个组件,通过 v-model 或事件切换当前显示的组件。
<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 '@/components/Tab1'
import Tab2 from '@/components/Tab2'
export default {
components: { Tab1, Tab2 },
data() {
return { currentTab: 'Tab1' }
}
}
</script>
结合状态管理(Vuex)
如果需要跨组件共享 Tab 状态,可以使用 Vuex 管理当前激活的 Tab。在 Vuex 中定义状态和 mutations,组件中通过 mapState 和 mapMutations 访问和修改状态。
// store/index.js
export default new Vuex.Store({
state: { currentTab: 'Tab1' },
mutations: {
setCurrentTab(state, tab) { state.currentTab = tab }
}
})
组件中通过 Vuex 状态切换 Tab。
<template>
<div>
<button @click="setCurrentTab('Tab1')">Tab 1</button>
<button @click="setCurrentTab('Tab2')">Tab 2</button>
<component :is="currentTab"></component>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex'
export default {
computed: { ...mapState(['currentTab']) },
methods: { ...mapMutations(['setCurrentTab']) }
}
</script>
使用第三方库(如 Element UI)
如果使用 UI 框架(如 Element UI),可以直接使用其提供的 Tab 组件快速实现功能。Element UI 的 el-tabs 组件内置了 Tab 切换逻辑。
<template>
<el-tabs v-model="activeTab">
<el-tab-pane label="Tab 1" name="tab1">Tab 1 Content</el-tab-pane>
<el-tab-pane label="Tab 2" name="tab2">Tab 2 Content</el-tab-pane>
</el-tabs>
</template>
<script>
export default {
data() { return { activeTab: 'tab1' } }
}
</script>
注意事项
- 动态组件切换时,未被激活的组件会被销毁。如果需要保留状态,可以使用
<keep-alive>包裹<component>或<router-view>。 - 路由模式(Hash 或 History)需根据项目需求配置。
- 第三方库的 Tab 组件可能提供更多功能(如动画、懒加载等),可根据需求选择。







