当前位置:首页 > 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论坛实现步骤 项目初始化 使用Vue CLI或Vite创建Vue 3项目。安装必要依赖如vue-router、axios、pinia/vuex。 npm create vue@latest…

Vue实现路由监

Vue实现路由监

Vue实现路由监听的方法 在Vue中,可以通过多种方式监听路由变化,以下是常见的实现方法: 使用Vue Router的全局前置守卫 router.beforeEach((to, from,…

用Vue实现

用Vue实现

Vue实现方法 安装Vue 确保已安装Node.js和npm。使用Vue CLI创建新项目: npm install -g @vue/cli vue create project-name cd…

Vue界面实现

Vue界面实现

Vue 界面实现基础 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心思想是数据驱动和组件化开发,适合构建单页应用(SPA)或复杂的前端界面。 环境准备 确保已安装…

Vue实现画布

Vue实现画布

Vue 实现画布的方法 在 Vue 中实现画布功能可以通过 HTML5 的 <canvas> 元素结合 Vue 的响应式特性来完成。以下是几种常见的实现方式: 使用原生 <canv…

Vue函数实现

Vue函数实现

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