当前位置:首页 > VUE

vue 多选实现思路

2026-02-19 08:06:47VUE

多选框基础实现

使用v-model绑定数组类型数据,配合checkboxvalue属性实现多选功能。当勾选时,对应value会被添加到数组中;取消勾选时从数组中移除。

<template>
  <div>
    <label v-for="option in options" :key="option.value">
      <input 
        type="checkbox" 
        v-model="selectedValues" 
        :value="option.value"
      >
      {{ option.label }}
    </label>
    <p>已选择: {{ selectedValues }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      options: [
        { value: 'A', label: '选项A' },
        { value: 'B', label: '选项B' },
        { value: 'C', label: '选项C' }
      ],
      selectedValues: []
    }
  }
}
</script>

自定义多选组件封装

封装可复用的多选框组件,支持动态选项和自定义样式。通过props接收选项列表,通过$emit触发选择变化事件。

vue 多选实现思路

<template>
  <div class="multi-select">
    <div 
      v-for="item in options"
      :key="item.value"
      class="select-item"
      :class="{ 'active': isSelected(item.value) }"
      @click="toggleSelect(item.value)"
    >
      {{ item.label }}
    </div>
  </div>
</template>

<script>
export default {
  props: {
    options: {
      type: Array,
      required: true
    },
    value: {
      type: Array,
      default: () => []
    }
  },
  methods: {
    isSelected(val) {
      return this.value.includes(val)
    },
    toggleSelect(val) {
      const newValue = [...this.value]
      const index = newValue.indexOf(val)

      index === -1 
        ? newValue.push(val)
        : newValue.splice(index, 1)

      this.$emit('input', newValue)
    }
  }
}
</script>

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

全选/反选功能实现

添加全选控制逻辑,通过计算属性判断是否全选,并提供全选/取消全选的方法。

vue 多选实现思路

computed: {
  isAllSelected: {
    get() {
      return this.selectedValues.length === this.options.length
    },
    set(val) {
      this.selectedValues = val 
        ? this.options.map(item => item.value) 
        : []
    }
  }
}

多选表格实现

在表格中实现多选行功能,结合el-table等UI组件库使用时需要注意行数据的唯一标识。

<el-table
  ref="multipleTable"
  :data="tableData"
  @selection-change="handleSelectionChange"
>
  <el-table-column type="selection" width="55"></el-table-column>
  <el-table-column prop="name" label="名称"></el-table-column>
</el-table>

<script>
export default {
  methods: {
    handleSelectionChange(val) {
      this.selectedRows = val
    },
    toggleSelection(rows) {
      rows.forEach(row => {
        this.$refs.multipleTable.toggleRowSelection(row)
      })
    }
  }
}
</script>

多选数据验证

对多选结果进行验证,确保至少选择N项或符合特定条件。

validateSelection() {
  if (this.selectedValues.length < 2) {
    this.$message.error('请至少选择两项')
    return false
  }
  return true
}

标签: 多选思路
分享给朋友:

相关文章

Vue实现思路

Vue实现思路

Vue 实现思路 Vue 是一种流行的前端框架,用于构建用户界面。其核心思想是通过数据驱动和组件化开发,使开发过程更加高效和可维护。以下是 Vue 实现的一些关键思路: 数据驱动视图 Vue 采用响…

vue按钮实现多选

vue按钮实现多选

Vue 按钮实现多选的方法 在 Vue 中实现按钮多选功能,可以通过绑定 v-model 到数组或对象,结合样式控制来实现。以下是几种常见方法: 方法一:使用 v-model 绑定数组 通过…

vue实现登录思路

vue实现登录思路

Vue 登录功能实现思路 1. 前端页面设计 使用 Vue 的单文件组件(SFC)构建登录页面,包含表单元素(用户名、密码输入框)和提交按钮。表单需绑定 v-model 实现双向数据绑定,并通过 v-…

vue实现多选删除

vue实现多选删除

实现多选删除功能 在Vue中实现多选删除功能通常涉及以下几个关键步骤:数据绑定、选择状态管理、删除逻辑处理。以下是具体实现方法: 数据准备与渲染 创建包含选择状态的数据结构,通常是一个对象数组,每…

vue tree 实现思路

vue tree 实现思路

Vue Tree 组件实现思路 数据结构设计 树形组件的数据通常采用嵌套结构,每个节点包含 label、children 等属性。例如: const treeData = [ { la…

vue实现多选搜索

vue实现多选搜索

Vue 多选搜索实现方法 使用 Element UI 的 Select 组件 Element UI 提供了带有搜索功能的多选组件,适合快速实现需求。 安装 Element UI: npm inst…