vue.js实现tab

使用 Vue.js 实现 Tab 功能
在 Vue.js 中实现 Tab 功能可以通过动态组件或条件渲染实现。以下是两种常见方法:
方法一:使用动态组件和 v-for 指令
<template>
<div>
<div class="tab-buttons">
<button
v-for="(tab, index) in tabs"
:key="index"
@click="currentTab = tab"
:class="{ active: currentTab === tab }"
>
{{ tab }}
</button>
</div>
<div class="tab-content">
<component :is="currentTabComponent" />
</div>
</div>
</template>
<script>
export default {
data() {
return {
tabs: ['Home', 'About', 'Contact'],
currentTab: 'Home'
}
},
computed: {
currentTabComponent() {
return this.currentTab.toLowerCase() + '-tab'
}
},
components: {
'home-tab': { template: '<div>Home Content</div>' },
'about-tab': { template: '<div>About Content</div>' },
'contact-tab': { template: '<div>Contact Content</div>' }
}
}
</script>
<style>
.tab-buttons button {
padding: 8px 16px;
margin-right: 4px;
background: #eee;
border: none;
cursor: pointer;
}
.tab-buttons button.active {
background: #ddd;
font-weight: bold;
}
</style>
方法二:使用条件渲染
<template>
<div>
<div class="tab-buttons">
<button
v-for="(tab, index) in tabs"
:key="index"
@click="currentTab = index"
:class="{ active: currentTab === index }"
>
{{ tab.name }}
</button>
</div>
<div class="tab-content">
<div v-if="currentTab === 0">
<h3>Home Content</h3>
<p>This is the home tab content</p>
</div>
<div v-else-if="currentTab === 1">
<h3>About Content</h3>
<p>This is the about tab content</p>
</div>
<div v-else>
<h3>Contact Content</h3>
<p>This is the contact tab content</p>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
tabs: [
{ name: 'Home' },
{ name: 'About' },
{ name: 'Contact' }
],
currentTab: 0
}
}
}
</script>
方法三:使用 Vue Router 实现路由式 Tab
如果需要 URL 可访问的 Tab,可以使用 Vue Router:
// router.js
import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'
import About from './views/About.vue'
import Contact from './views/Contact.vue'
Vue.use(Router)
export default new Router({
routes: [
{ path: '/', name: 'home', component: Home },
{ path: '/about', name: 'about', component: About },
{ path: '/contact', name: 'contact', component: Contact }
]
})
<!-- App.vue -->
<template>
<div id="app">
<router-link
v-for="route in routes"
:key="route.path"
:to="route.path"
active-class="active"
>
{{ route.name }}
</router-link>
<router-view></router-view>
</div>
</template>
<script>
export default {
data() {
return {
routes: [
{ path: '/', name: 'Home' },
{ path: '/about', name: 'About' },
{ path: '/contact', name: 'Contact' }
]
}
}
}
</script>
以上方法可以根据项目需求选择适合的实现方式。动态组件适合内容差异较大的 Tab,条件渲染适合简单内容切换,路由方式则适合需要 URL 导航的场景。







