当前位置:首页 > VUE

vue 实现tab切换

2026-03-08 04:11:24VUE

Vue 实现 Tab 切换的方法

使用动态组件 <component :is>

通过 Vue 的动态组件特性,结合 v-forv-if 实现 Tab 切换:

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

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

export default {
  components: { Tab1, Tab2 },
  data() {
    return {
      currentTab: 'Tab1',
      tabs: [
        { name: 'Tab 1', component: 'Tab1' },
        { name: 'Tab 2', component: 'Tab2' }
      ]
    };
  }
};
</script>

<style>
.tab-buttons button.active {
  background-color: #4CAF50;
  color: white;
}
</style>

使用 v-show 控制显示

通过 v-show 切换不同 Tab 内容的显示状态:

<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-show="currentTab === 0">Content for Tab 1</div>
      <div v-show="currentTab === 1">Content for Tab 2</div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 0,
      tabs: [
        { name: 'Tab 1' },
        { name: 'Tab 2' }
      ]
    };
  }
};
</script>

使用 Vue Router 实现

结合 Vue Router 实现带路由的 Tab 切换:

// router.js
import Vue from 'vue';
import Router from 'vue-router';
import Tab1 from './views/Tab1.vue';
import Tab2 from './views/Tab2.vue';

Vue.use(Router);

export default new Router({
  routes: [
    { path: '/tab1', component: Tab1 },
    { path: '/tab2', component: Tab2 }
  ]
});
<!-- App.vue -->
<template>
  <div>
    <router-link to="/tab1" tag="button">Tab 1</router-link>
    <router-link to="/tab2" tag="button">Tab 2</router-link>
    <router-view></router-view>
  </div>
</template>

使用第三方库

可以使用现成的 Vue Tab 组件库,如 vue-tabs-component

vue 实现tab切换

npm install vue-tabs-component
import { Tabs, Tab } from 'vue-tabs-component';

export default {
  components: { Tabs, Tab }
};
<template>
  <tabs>
    <tab name="First tab">
      Content for first tab
    </tab>
    <tab name="Second tab">
      Content for second tab
    </tab>
  </tabs>
</template>

注意事项

  • 动态组件方法适合不同 Tab 内容差异较大的场景
  • v-show 方法适合简单的内容切换,所有 Tab 内容会同时存在于 DOM 中
  • Vue Router 方法适合需要 URL 同步的场景
  • 第三方库可以提供更多高级功能如动画、懒加载等

标签: vuetab
分享给朋友:

相关文章

vue实现分类

vue实现分类

Vue实现分类功能的方法 使用v-for和计算属性 通过计算属性对数据进行分类处理,结合v-for渲染分类后的列表。示例代码: <template> <div>…

vue mvvm 实现

vue mvvm 实现

Vue MVVM 实现原理 Vue.js 的 MVVM(Model-View-ViewModel)架构通过数据绑定和响应式系统实现视图与数据的自动同步。以下是其核心实现机制: 数据劫持与响应式系统…

vue实现openoffice

vue实现openoffice

Vue 中集成 OpenOffice 的实现方法 在 Vue 项目中集成 OpenOffice 通常需要通过后端服务或现有库实现文档的预览和编辑功能。以下是几种常见的实现方式: 使用 OnlyOff…

vue实现数据

vue实现数据

Vue 实现数据绑定的方法 Vue.js 提供了多种方式实现数据绑定,包括双向绑定、单向绑定以及动态数据绑定。以下是几种常见的实现方式: 双向数据绑定(v-model) 双向数据绑定通常用于表单元素…

vue实现tooltips

vue实现tooltips

Vue 实现 Tooltips 的方法 使用原生 HTML title 属性 在 Vue 模板中直接使用 HTML 原生 title 属性实现简单的提示效果。这种方式无需额外依赖,但功能较为基础,无法…

vue实现拉伸

vue实现拉伸

Vue 实现元素拉伸功能 在Vue中实现元素的拉伸(拖拽调整大小)功能,可以通过监听鼠标事件结合CSS样式来实现。以下是两种常见实现方式: 使用原生事件监听 创建可拉伸的组件需要处理鼠标按下、移动和…