当前位置:首页 > VUE

vue 实现点击tab切换

2026-02-23 16:12:32VUE

Vue 实现 Tab 切换功能

基础实现(v-show/v-if + 事件)

通过 v-showv-if 控制内容显示,配合点击事件切换状态:

<template>
  <div>
    <div class="tabs">
      <button 
        v-for="(tab, index) in tabs" 
        :key="index"
        @click="currentTab = index"
        :class="{ active: currentTab === index }"
      >
        {{ tab.title }}
      </button>
    </div>

    <div class="content">
      <div v-show="currentTab === 0">内容1</div>
      <div v-show="currentTab === 1">内容2</div>
      <!-- 或使用动态渲染 -->
      <div>{{ tabs[currentTab].content }}</div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 0,
      tabs: [
        { title: 'Tab1', content: '内容1' },
        { title: 'Tab2', content: '内容2' }
      ]
    }
  }
}
</script>

<style>
.active {
  background-color: #42b983;
  color: white;
}
</style>

动态组件实现(component + is)

通过动态组件实现更灵活的切换:

<template>
  <div>
    <button 
      v-for="(tab, name) in tabs"
      :key="name"
      @click="currentTab = name"
    >
      {{ tab.title }}
    </button>

    <component :is="currentTabComponent"></component>
  </div>
</template>

<script>
import Tab1 from './Tab1.vue'
import Tab2 from './Tab2.vue'

export default {
  components: { Tab1, Tab2 },
  data() {
    return {
      currentTab: 'Tab1',
      tabs: {
        Tab1: { title: '标签1' },
        Tab2: { title: '标签2' }
      }
    }
  },
  computed: {
    currentTabComponent() {
      return this.currentTab
    }
  }
}
</script>

路由集成方案

结合 vue-router 实现带 URL 状态的 Tab:

// router.js
const routes = [
  { path: '/tab1', component: Tab1 },
  { path: '/tab2', component: Tab2 }
]
<template>
  <router-link 
    v-for="tab in tabs"
    :key="tab.path"
    :to="tab.path"
    active-class="active"
  >
    {{ tab.title }}
  </router-link>

  <router-view></router-view>
</template>

动画过渡效果

为切换添加过渡动画:

<transition name="fade" mode="out-in">
  <component :is="currentTabComponent"></component>
</transition>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.3s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

注意事项

  • 频繁切换建议使用 v-show 避免组件重渲染
  • 需要保持状态时使用 keep-alive 包裹动态组件
  • 移动端可结合手势库实现滑动切换
  • 复杂场景可使用专门的状态管理(如 Pinia)维护 Tab 状态

以上方案可根据实际需求组合使用,基础项目通常采用第一种方案即可满足需求,大型应用建议采用路由集成方案。

vue 实现点击tab切换

标签: vuetab
分享给朋友:

相关文章

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vue…

实现vue模版

实现vue模版

Vue 模板的基本结构 Vue 模板基于 HTML 语法,通过 Vue 的指令和插值实现动态渲染。以下是一个基础模板示例: <template> <div id="…

ssh vue 实现

ssh vue 实现

使用SSH连接Vue项目部署的服务器 在Vue项目开发或部署过程中,可能需要通过SSH连接到远程服务器进行配置或维护。以下是实现SSH连接并部署Vue项目的关键步骤: 生成SSH密钥对 在本地终端运…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: &l…

vue实现图册

vue实现图册

Vue实现图册功能 在Vue中实现图册功能通常涉及图片展示、切换、缩放等交互效果。以下是常见的实现方法和关键代码示例: 基础图册组件结构 使用Vue单文件组件构建基础结构: <templat…

vue实现模块

vue实现模块

Vue 实现模块化的方法 Vue 支持多种模块化开发方式,可以根据项目需求选择适合的方案。 使用单文件组件(SFC) 单文件组件是 Vue 最常用的模块化方式,将模板、脚本和样式封装在一个 .vue…