当前位置:首页 > VUE

vue 实现点击tab切换

2026-02-23 16:12:32VUE

Vue 实现 Tab 切换功能

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

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

vue 实现点击tab切换

<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)

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

vue 实现点击tab切换

<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 状态

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

标签: vuetab
分享给朋友:

相关文章

vue实现anchor

vue实现anchor

Vue 实现 Anchor(锚点)功能 在 Vue 中实现锚点功能可以通过多种方式完成,以下是几种常见的方法: 使用 HTML 原生锚点 HTML 原生锚点是最简单的方式,通过 <a>…

vue 指令实现

vue 指令实现

Vue 指令实现 Vue 指令是 Vue.js 提供的特殊属性,用于在 DOM 元素上添加特殊行为。指令以 v- 前缀开头,例如 v-model、v-if、v-for 等。以下是实现自定义指令和常用内…

vue 全景实现

vue 全景实现

Vue 全景实现方案 在Vue中实现全景效果,通常需要结合WebGL或第三方库来处理3D场景渲染。以下是几种常见方法: 使用Three.js库 Three.js是一个强大的WebGL库,适合创建3D…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transiti…

vue实现webapp

vue实现webapp

Vue 实现 WebApp 的基本步骤 环境准备 确保已安装 Node.js 和 npm/yarn。通过 Vue CLI 或 Vite 创建项目: npm install -g @vue/cli v…

vue ref实现

vue ref实现

Vue 中 ref 的实现 在 Vue 中,ref 是一个用于创建响应式引用的 API,适用于基本类型和对象。以下是 ref 的核心实现原理和使用方法。 基本实现原理 ref 通过 Reactive…