vue实现列表选择
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>
<p>已选择: {{ selectedItems }}</p>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, label: '选项1', value: 'value1' },
{ id: 2, label: '选项2', value: 'value2' },
{ id: 3, label: '选项3', value: 'value3' }
],
selectedItems: []
}
}
}
</script>
使用单选模式
通过 v-model 绑定单个值实现单选功能。适用于单选按钮或下拉菜单。

<template>
<div>
<select v-model="selectedItem">
<option
v-for="item in items"
:key="item.id"
:value="item.value"
>
{{ item.label }}
</option>
</select>
<p>已选择: {{ selectedItem }}</p>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, label: '选项1', value: 'value1' },
{ id: 2, label: '选项2', value: 'value2' },
{ id: 3, label: '选项3', value: 'value3' }
],
selectedItem: ''
}
}
}
</script>
自定义选择逻辑
通过方法处理选择逻辑,适用于需要复杂交互的场景。

<template>
<div>
<ul>
<li
v-for="item in items"
:key="item.id"
@click="toggleSelect(item)"
:class="{ active: isSelected(item) }"
>
{{ item.label }}
</li>
</ul>
<p>已选择: {{ selectedItems.map(item => item.label) }}</p>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, label: '选项1', value: 'value1' },
{ id: 2, label: '选项2', value: 'value2' },
{ id: 3, label: '选项3', value: 'value3' }
],
selectedItems: []
}
},
methods: {
toggleSelect(item) {
const index = this.selectedItems.findIndex(selected => selected.id === item.id)
if (index === -1) {
this.selectedItems.push(item)
} else {
this.selectedItems.splice(index, 1)
}
},
isSelected(item) {
return this.selectedItems.some(selected => selected.id === item.id)
}
}
}
</script>
<style>
.active {
background-color: #f0f0f0;
}
</style>
使用第三方组件库
Element UI 或 Vuetify 等库提供了更丰富的选择组件。
以 Element UI 为例:
<template>
<el-checkbox-group v-model="selectedItems">
<el-checkbox
v-for="item in items"
:key="item.id"
:label="item.value"
>
{{ item.label }}
</el-checkbox>
</el-checkbox-group>
</template>
这些方法覆盖了从基础到高级的列表选择实现,可以根据具体需求选择合适的方式。






