当前位置:首页 > VUE

vue实现tab多选

2026-02-18 07:30:49VUE

Vue 实现 Tab 多选功能

核心思路

通过 v-model 绑定一个数组来存储选中的 tab,结合 v-for 循环渲染 tab 列表,使用复选框或自定义样式实现多选交互。

基础实现代码示例

<template>
  <div class="tab-container">
    <div 
      v-for="tab in tabs" 
      :key="tab.id"
      class="tab-item"
      :class="{ 'active': selectedTabs.includes(tab.id) }"
      @click="toggleTab(tab.id)"
    >
      {{ tab.label }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tabs: [
        { id: 1, label: 'Tab 1' },
        { id: 2, label: 'Tab 2' },
        { id: 3, label: 'Tab 3' }
      ],
      selectedTabs: []
    }
  },
  methods: {
    toggleTab(tabId) {
      const index = this.selectedTabs.indexOf(tabId)
      if (index > -1) {
        this.selectedTabs.splice(index, 1)
      } else {
        this.selectedTabs.push(tabId)
      }
    }
  }
}
</script>

<style>
.tab-item {
  display: inline-block;
  padding: 8px 16px;
  margin-right: 8px;
  cursor: pointer;
  border: 1px solid #ddd;
}

.tab-item.active {
  background-color: #409eff;
  color: white;
}
</style>

使用复选框的实现方式

<template>
  <div class="checkbox-tabs">
    <div v-for="tab in tabs" :key="tab.id" class="tab-item">
      <input 
        type="checkbox" 
        :id="'tab-' + tab.id"
        :value="tab.id"
        v-model="selectedTabs"
      >
      <label :for="'tab-' + tab.id">{{ tab.label }}</label>
    </div>
  </div>
</template>

进阶功能实现

添加全选/取消全选功能:

methods: {
  toggleAllTabs(selectAll) {
    this.selectedTabs = selectAll 
      ? this.tabs.map(tab => tab.id) 
      : []
  }
}

添加最大选择数量限制:

methods: {
  toggleTab(tabId) {
    const maxSelection = 2 // 最大选择数量
    const index = this.selectedTabs.indexOf(tabId)

    if (index > -1) {
      this.selectedTabs.splice(index, 1)
    } else if (this.selectedTabs.length < maxSelection) {
      this.selectedTabs.push(tabId)
    }
  }
}

性能优化建议

对于大量 tab 的情况,可以使用 Set 代替数组来提高查找效率:

data() {
  return {
    selectedTabs: new Set()
  }
},
methods: {
  toggleTab(tabId) {
    if (this.selectedTabs.has(tabId)) {
      this.selectedTabs.delete(tabId)
    } else {
      this.selectedTabs.add(tabId)
    }
  }
}

与 Vuex 集成

如果需要全局状态管理:

vue实现tab多选

computed: {
  selectedTabs: {
    get() {
      return this.$store.state.selectedTabs
    },
    set(value) {
      this.$store.commit('updateSelectedTabs', value)
    }
  }
}

标签: 多选vue
分享给朋友:

相关文章

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

antd vue 实现

antd vue 实现

使用 Ant Design Vue 实现功能 Ant Design Vue 是基于 Vue.js 的 UI 组件库,提供了丰富的组件和设计规范。以下是一些常见功能的实现方法。 安装 Ant Desi…

vue插件实现

vue插件实现

Vue 插件实现方法 Vue 插件是一种向 Vue 应用程序添加全局功能的机制。插件可以包含全局指令、过滤器、混入、实例方法等。 插件的基本结构 一个 Vue 插件通常是一个对象或函数,需要暴露一个…

vue实现tree

vue实现tree

Vue 实现 Tree 组件 使用 Vue 实现 Tree 组件可以通过递归组件的方式来实现层级结构展示。以下是一个完整的实现方法: 基础递归组件实现 创建 Tree 组件文件 Tree.vue,使…

vue实现computed

vue实现computed

Vue 中 computed 的实现原理 computed 属性是 Vue 的一个核心特性,它基于响应式依赖进行缓存,仅在依赖发生变化时重新计算。以下是 computed 的实现方式: 基本用法 在…

vue删除实现

vue删除实现

Vue 删除功能的实现方法 在 Vue 中实现删除功能通常涉及以下几个步骤: 方法一:使用数组的 splice 方法 通过索引删除数组中的元素,适用于列表渲染的场景。 methods: {…