当前位置:首页 > VUE

纯Vue实现tab标签

2026-01-21 01:47:51VUE

Vue 实现 Tab 标签的步骤

基础结构 使用 Vue 的 v-forv-showv-if 实现动态渲染标签和内容。模板部分需包含标签头(tab headers)和内容区域(tab panels)。

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

数据与状态管理 在 Vue 组件的 data 中定义标签数据和控制状态的变量。tabs 数组存储标签信息,activeTab 记录当前选中标签的索引。

<script>
export default {
  data() {
    return {
      tabs: [
        { title: '标签1', content: '内容1' },
        { title: '标签2', content: '内容2' },
        { title: '标签3', content: '内容3' }
      ],
      activeTab: 0
    };
  }
};
</script>

样式优化 通过 CSS 高亮当前选中的标签,并优化布局。使用 flex 布局对齐标签头,为激活状态添加视觉反馈。

<style scoped>
.tab-headers {
  display: flex;
  gap: 10px;
  margin-bottom: 10px;
}
.tab-headers button {
  padding: 8px 16px;
  border: none;
  background: #eee;
  cursor: pointer;
}
.tab-headers button.active {
  background: #007bff;
  color: white;
}
.tab-content {
  border: 1px solid #ddd;
  padding: 20px;
}
</style>

动态添加/删除标签

扩展功能支持动态增删标签。通过方法修改 tabs 数组,并确保 activeTab 逻辑正确。

methods: {
  addTab() {
    this.tabs.push({
      title: `标签${this.tabs.length + 1}`,
      content: `内容${this.tabs.length + 1}`
    });
  },
  removeTab(index) {
    this.tabs.splice(index, 1);
    if (this.activeTab >= this.tabs.length) {
      this.activeTab = Math.max(0, this.tabs.length - 1);
    }
  }
}

使用组件化

将标签封装为可复用组件,通过插槽(slots)或 props 传递内容。父组件通过 v-model 控制激活状态。

<!-- 子组件 TabContainer.vue -->
<template>
  <div class="tabs">
    <slot :activeTab="activeTab" :setActiveTab="setActiveTab"></slot>
  </div>
</template>

<script>
export default {
  props: ['initialTab'],
  data() {
    return { activeTab: this.initialTab || 0 };
  },
  methods: {
    setActiveTab(index) {
      this.activeTab = index;
    }
  }
};
</script>

父组件调用示例

纯Vue实现tab标签

<template>
  <TabContainer v-model="currentTab">
    <template #default="{ activeTab, setActiveTab }">
      <div class="tab-headers">
        <button 
          v-for="(tab, index) in tabs" 
          @click="setActiveTab(index)"
          :class="{ active: activeTab === index }"
        >
          {{ tab.title }}
        </button>
      </div>
      <div class="tab-content">
        <div v-for="(tab, index) in tabs" v-show="activeTab === index">
          {{ tab.content }}
        </div>
      </div>
    </template>
  </TabContainer>
</template>

标签: 标签Vue
分享给朋友:

相关文章

Vue实现手机推送

Vue实现手机推送

Vue 中实现手机推送的方法 在 Vue 项目中实现手机推送功能,通常需要结合第三方推送服务(如 Firebase Cloud Messaging、极光推送等)或原生移动端能力(通过 Cordova/…

Vue实现路由监

Vue实现路由监

Vue 实现路由监听的方法 在 Vue 中可以通过多种方式实现路由监听,以下是常见的几种方法: 使用 watch 监听 $route 对象 通过 Vue 的 watch 功能可以监听 $route…

vue实现彩色标签

vue实现彩色标签

实现彩色标签的方法 在Vue中实现彩色标签可以通过多种方式完成,以下是几种常见的实现方法: 使用动态类名绑定 通过动态绑定类名,可以根据数据动态改变标签的颜色。例如: <templa…

Vue实现时钟

Vue实现时钟

Vue实现时钟的方法 使用Vue实现时钟可以通过多种方式完成,以下是几种常见的实现方法: 使用Date对象和setInterval 通过JavaScript的Date对象获取当前时间,并使用setI…

Vue拖拽怎么实现

Vue拖拽怎么实现

Vue拖拽实现方法 使用Vue实现拖拽功能可以通过原生HTML5的拖拽API或第三方库如vuedraggable来实现。以下是两种常见的方法: 使用HTML5拖拽API HTML5提供了原生的拖拽A…

Vue如何实现扫雷

Vue如何实现扫雷

Vue 实现扫雷游戏的核心思路 扫雷游戏的核心逻辑包括生成雷区、处理点击事件、计算周围雷数以及递归展开空白区域。Vue 的响应式特性非常适合管理游戏状态和更新视图。 数据结构设计 使用二维数组表示雷…