当前位置:首页 > VUE

vue实现active多选

2026-01-18 03:06:47VUE

实现多选高亮(active)效果

在Vue中实现多选高亮效果可以通过以下方式完成:

使用v-for和v-bind:class

通过动态绑定class实现选中状态切换,适用于列表项多选场景:

<template>
  <div>
    <div 
      v-for="item in items" 
      :key="item.id"
      @click="toggleSelect(item)"
      :class="{ active: selectedItems.includes(item) }"
    >
      {{ item.name }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: '选项1' },
        { id: 2, name: '选项2' },
        { id: 3, name: '选项3' }
      ],
      selectedItems: []
    }
  },
  methods: {
    toggleSelect(item) {
      const index = this.selectedItems.findIndex(i => i.id === item.id)
      if (index === -1) {
        this.selectedItems.push(item)
      } else {
        this.selectedItems.splice(index, 1)
      }
    }
  }
}
</script>

<style>
.active {
  background-color: #42b983;
  color: white;
}
</style>

使用复选框组实现

通过v-model绑定数组实现多选,适合表单场景:

vue实现active多选

<template>
  <div>
    <div v-for="item in items" :key="item.id">
      <input 
        type="checkbox" 
        :id="'item-' + item.id" 
        :value="item" 
        v-model="selectedItems"
      >
      <label :for="'item-' + item.id">{{ item.name }}</label>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: '选项1' },
        { id: 2, name: '选项2' },
        { id: 3, name: '选项3' }
      ],
      selectedItems: []
    }
  }
}
</script>

使用计算属性优化

对于大型列表,可以使用计算属性优化性能:

computed: {
  isSelected() {
    return (item) => this.selectedItems.some(selected => selected.id === item.id)
  }
}

模板中使用:

vue实现active多选

<div 
  v-for="item in items" 
  :key="item.id"
  @click="toggleSelect(item)"
  :class="{ active: isSelected(item) }"
>
  {{ item.name }}
</div>

使用Set提高查找效率

当处理大量数据时,使用Set代替数组可以提高查找效率:

data() {
  return {
    selectedItems: new Set()
  }
},
methods: {
  toggleSelect(item) {
    if (this.selectedItems.has(item.id)) {
      this.selectedItems.delete(item.id)
    } else {
      this.selectedItems.add(item.id)
    }
  }
}

自定义指令实现

创建自定义指令实现高亮逻辑复用:

Vue.directive('selectable', {
  bind(el, binding, vnode) {
    el.addEventListener('click', () => {
      const vm = vnode.context
      vm.toggleSelect(binding.value)
    })
  },
  update(el, binding, vnode) {
    const vm = vnode.context
    el.classList.toggle('active', vm.isSelected(binding.value))
  }
})

使用方式:

<div 
  v-for="item in items" 
  :key="item.id"
  v-selectable="item"
>
  {{ item.name }}
</div>

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

相关文章

vue使用vr实现标注

vue使用vr实现标注

Vue 中使用 VR 实现标注的方法 在 Vue 项目中结合 VR 技术实现标注功能,可以通过 WebXR 和 Three.js 等库实现。以下为具体实现方法: 安装依赖 确保项目中已安装 Thre…

vue tag实现

vue tag实现

Vue 标签实现方法 在 Vue 中实现标签功能可以通过多种方式完成,常见场景包括动态标签生成、标签输入框、标签管理等。以下是几种典型实现方案: 动态标签列表渲染 使用 v-for 指令渲染标签数组…

实现简易vue

实现简易vue

实现简易 Vue 的核心思路 Vue 的核心功能包括数据响应式、模板编译和虚拟 DOM。以下是一个简易实现方案,涵盖核心功能模块。 数据响应式系统 通过 Object.defineProperty…

vue实现driver

vue实现driver

Vue 实现 Driver.js 引导功能 Driver.js 是一个轻量级的 JavaScript 库,用于在网页上创建引导式导览。以下是在 Vue 项目中集成 Driver.js 的详细方法:…

vue实现购票

vue实现购票

Vue 实现购票功能 数据结构设计 购票功能通常需要以下数据结构: 场次信息(时间、地点、价格) 座位信息(可选座位、已售座位) 用户订单信息 示例数据结构: data() { return…

vue实现兼容

vue实现兼容

Vue 兼容性实现方案 Vue.js 的兼容性主要涉及对不同浏览器、Vue 版本以及第三方库的支持。以下是常见的兼容性解决方案: 浏览器兼容性 使用 Babel 转换 ES6+ 代码为 ES5 语…