当前位置:首页 > VUE

vue实现多选列表

2026-02-19 06:11:24VUE

Vue 实现多选列表的方法

基础实现

使用 v-model 绑定数组实现多选功能,结合 v-for 渲染列表项:

<template>
  <div>
    <h3>选择你喜欢的项目:</h3>
    <div v-for="item in items" :key="item.id">
      <input 
        type="checkbox" 
        :id="item.id" 
        :value="item.value" 
        v-model="selectedItems"
      >
      <label :for="item.id">{{ item.label }}</label>
    </div>
    <p>已选择:{{ selectedItems }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 'opt1', value: 'vue', label: 'Vue.js' },
        { id: 'opt2', value: 'react', label: 'React' },
        { id: 'opt3', value: 'angular', label: 'Angular' }
      ],
      selectedItems: []
    }
  }
}
</script>

使用组件库

Element UI 的多选组件示例:

<template>
  <el-checkbox-group v-model="checkedCities">
    <el-checkbox 
      v-for="city in cities" 
      :label="city" 
      :key="city"
    >{{ city }}</el-checkbox>
  </el-checkbox-group>
</template>

<script>
export default {
  data() {
    return {
      cities: ['上海', '北京', '广州', '深圳'],
      checkedCities: []
    }
  }
}
</script>

自定义样式多选

通过 CSS 和事件处理实现美观的多选效果:

<template>
  <div class="checkbox-list">
    <div 
      v-for="item in options"
      :key="item.value"
      class="checkbox-item"
      :class="{ active: selected.includes(item.value) }"
      @click="toggleSelection(item.value)"
    >
      {{ item.label }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      options: [
        { value: 1, label: '选项1' },
        { value: 2, label: '选项2' },
        { value: 3, label: '选项3' }
      ],
      selected: []
    }
  },
  methods: {
    toggleSelection(value) {
      const index = this.selected.indexOf(value)
      index === -1 
        ? this.selected.push(value) 
        : this.selected.splice(index, 1)
    }
  }
}
</script>

<style>
.checkbox-item {
  padding: 8px 12px;
  border: 1px solid #ddd;
  margin: 5px;
  cursor: pointer;
}
.checkbox-item.active {
  background-color: #409eff;
  color: white;
}
</style>

全选/反选功能

添加全选控制逻辑:

<template>
  <div>
    <input 
      type="checkbox" 
      id="selectAll" 
      v-model="allSelected"
      @change="toggleAll"
    >
    <label for="selectAll">全选</label>

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

<script>
export default {
  data() {
    return {
      list: [
        { id: 1, name: '项目A' },
        { id: 2, name: '项目B' },
        { id: 3, name: '项目C' }
      ],
      selected: [],
      allSelected: false
    }
  },
  methods: {
    toggleAll() {
      this.selected = this.allSelected 
        ? this.list.map(item => item.id) 
        : []
    }
  },
  watch: {
    selected(newVal) {
      this.allSelected = newVal.length === this.list.length
    }
  }
}
</script>

注意事项

  • 确保 v-model 绑定的是数组类型变量
  • 多选组件需要设置不同的 key 属性
  • 大数据量列表考虑使用虚拟滚动优化性能
  • 移动端注意触摸反馈和选择区域大小

以上方法可根据实际需求组合使用,Vue 的响应式特性使得多选状态管理变得简单高效。

vue实现多选列表

标签: 多选列表
分享给朋友:

相关文章

vue实现考试多选功能

vue实现考试多选功能

实现考试多选功能的方法 数据绑定与选项渲染 使用v-model绑定用户选择的答案数组,配合v-for渲染选项列表: <template> <div v-for="(op…

vue实现列表添加

vue实现列表添加

使用 Vue 实现列表添加功能 数据绑定与列表渲染 在 Vue 中,通过 v-for 指令可以轻松实现列表渲染。首先需要定义一个数组来存储列表数据,并在模板中使用 v-for 循环渲染。 <…

jquery列表

jquery列表

jQuery 列表操作 jQuery 提供了多种方法来操作 HTML 列表(如 <ul> 或 <ol>),包括动态添加、删除、修改列表项,以及事件绑定等。 创建列表 使用…

vue实现列表分类

vue实现列表分类

Vue 实现列表分类的方法 使用计算属性分类 通过计算属性对原始数组进行分类处理,返回分组后的对象或数组。适用于静态数据或需要响应式更新的场景。 computed: { categorized…

js 多选 实现

js 多选 实现

实现多选的 JavaScript 方法 使用复选框(Checkbox)实现多选 通过 HTML 的 checkbox 元素配合 JavaScript 实现多选功能。用户可以选择多个选项,提交时获取所有…

vue实现列表全选

vue实现列表全选

实现全选功能的基本思路 在Vue中实现列表全选功能,通常需要结合v-model和计算属性来管理选中状态。全选按钮的状态与列表中所有项的选中状态相互关联。 基础实现方法 准备一个数据列表和对应的选中状…