当前位置:首页 > 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>

父组件调用示例

<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实现tab标签

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

相关文章

Vue实现手机推送

Vue实现手机推送

Vue实现手机推送的方法 使用Firebase Cloud Messaging (FCM) Firebase Cloud Messaging是一种跨平台的消息推送解决方案,适用于Vue项目。需要在项目…

vue实现多标签选择器

vue实现多标签选择器

实现多标签选择器的核心思路 Vue中实现多标签选择器需要结合数据绑定、事件处理和样式控制。常见的实现方式包括基于原生HTML元素的扩展或使用第三方组件库。 基于原生HTML的实现方法 创建Vue组…

Vue函数实现

Vue函数实现

在Vue中实现函数可以通过多种方式,具体取决于使用场景(选项式API、组合式API或生命周期钩子)。以下是常见方法: 方法1:选项式API中的methods 在Vue 2或选项式API中,函数通常定…

jquery标签

jquery标签

jQuery 标签操作 jQuery 提供了多种方法来操作 HTML 标签(元素),包括创建、修改、删除和遍历等。以下是常用的 jQuery 标签操作方法: 选择标签 使用选择器获取 HTML 元素…

Vue数据依赖实现

Vue数据依赖实现

Vue数据依赖实现原理 Vue的数据依赖实现基于响应式系统,核心是通过Object.defineProperty或Proxy拦截数据变化,结合发布-订阅模式实现依赖收集和更新触发。 核心机制 依赖收…

jquery获取标签

jquery获取标签

jQuery获取标签的方法 jQuery提供了多种选择器和方法来获取HTML标签元素,以下是一些常见的方式: 通过标签名选择元素 使用标签名直接选择元素,例如选择所有<div>标签:…