vue 实现列表多选
实现列表多选的方法
使用 v-model 绑定数组
通过 v-model 绑定一个数组,当复选框被选中时,对应的值会自动添加到数组中。
<template>
<div>
<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>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ id: '1', value: 'apple', label: 'Apple' },
{ id: '2', value: 'banana', label: 'Banana' },
{ id: '3', value: 'orange', label: 'Orange' }
],
selectedItems: []
};
}
};
</script>
使用 v-for 动态渲染列表
结合 v-for 动态渲染复选框列表,确保每个复选框的值正确绑定到数组中。
<template>
<div>
<div v-for="(item, index) in items" :key="index">
<input type="checkbox" :value="item" v-model="selectedItems">
<label>{{ item }}</label>
</div>
</div>
</template>
<script>
export default {
data() {
return {
items: ['Apple', 'Banana', 'Orange'],
selectedItems: []
};
}
};
</script>
自定义多选组件
封装一个可复用的多选组件,支持更复杂的需求,如全选、反选等。
<template>
<div>
<div>
<input type="checkbox" v-model="selectAll" @change="toggleSelectAll">
<label>Select All</label>
</div>
<div v-for="item in items" :key="item.id">
<input type="checkbox" :value="item" v-model="selectedItems">
<label>{{ item.label }}</label>
</div>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ id: '1', label: 'Apple' },
{ id: '2', label: 'Banana' },
{ id: '3', label: 'Orange' }
],
selectedItems: []
};
},
computed: {
selectAll: {
get() {
return this.selectedItems.length === this.items.length;
},
set(value) {
this.selectedItems = value ? [...this.items] : [];
}
}
},
methods: {
toggleSelectAll() {
this.selectAll = !this.selectAll;
}
}
};
</script>
使用第三方库
对于更复杂的需求,可以使用第三方库如 vue-multiselect,提供更丰富的功能。

<template>
<div>
<multiselect
v-model="selectedItems"
:options="items"
:multiple="true"
:close-on-select="false"
placeholder="Select items"
label="label"
track-by="id"
></multiselect>
</div>
</template>
<script>
import Multiselect from 'vue-multiselect';
export default {
components: { Multiselect },
data() {
return {
items: [
{ id: '1', label: 'Apple' },
{ id: '2', label: 'Banana' },
{ id: '3', label: 'Orange' }
],
selectedItems: []
};
}
};
</script>
注意事项
- 确保每个复选框的
value唯一,避免绑定冲突。 - 使用
v-model绑定时,初始值应为空数组。 - 动态渲染列表时,为每个项添加唯一的
key属性以提升性能。






