当前位置:首页 > VUE

vue实现li多选

2026-03-28 23:15:39VUE

实现多选列表的基本思路

在Vue中实现多选列表功能,可以通过v-model绑定数组来管理选中状态。当用户点击列表项时,动态更新数组内容。

基础实现代码示例

<template>
  <div>
    <ul>
      <li 
        v-for="item in items" 
        :key="item.id"
        @click="toggleSelection(item)"
        :class="{ selected: selectedItems.includes(item) }"
      >
        {{ item.name }}
      </li>
    </ul>
    <p>已选择: {{ selectedItems.map(i => i.name).join(', ') }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: '选项1' },
        { id: 2, name: '选项2' },
        { id: 3, name: '选项3' }
      ],
      selectedItems: []
    }
  },
  methods: {
    toggleSelection(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>
.selected {
  background-color: #eee;
  font-weight: bold;
}
</style>

使用复选框的实现方式

更符合用户习惯的方式是使用复选框:

<template>
  <div>
    <ul>
      <li 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>
      </li>
    </ul>
  </div>
</template>

全选/全不选功能

可以添加全选功能提升用户体验:

<template>
  <div>
    <div>
      <input 
        type="checkbox" 
        id="select-all" 
        v-model="allSelected"
        @change="toggleAll"
      >
      <label for="select-all">全选</label>
    </div>
    <ul>
      <li 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>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  computed: {
    allSelected: {
      get() {
        return this.selectedItems.length === this.items.length
      },
      set(value) {
        this.selectedItems = value ? [...this.items] : []
      }
    }
  }
}
</script>

性能优化建议

对于大型列表,使用对象存储选中状态比数组更高效:

data() {
  return {
    selectedMap: {}
  }
},
methods: {
  toggleSelection(item) {
    this.$set(this.selectedMap, item.id, !this.selectedMap[item.id])
  },
  selectedItems() {
    return this.items.filter(item => this.selectedMap[item.id])
  }
}

与后端交互

提交选中数据时,通常只需要ID数组:

vue实现li多选

submit() {
  const selectedIds = this.selectedItems.map(item => item.id)
  // 发送selectedIds到后端
}

以上实现方式可以根据具体需求进行调整和组合,Vue的响应式系统使得多选列表的实现变得简单直观。

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

相关文章

vue实现点击页面切换

vue实现点击页面切换

实现点击页面切换功能 在Vue中实现点击页面切换功能,可以通过路由跳转或组件动态渲染两种方式完成。以下是具体实现方法: 使用Vue Router实现页面跳转 安装Vue Router后,在项目中配置…

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

vue 实现流程

vue 实现流程

Vue 实现流程 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是 Vue 实现的基本流程: 安装 Vue.js 通过 CDN 引入或使用 npm/yarn 安装:…

node vue实现

node vue实现

Node.js 与 Vue.js 实现方案 环境搭建 安装 Node.js(建议 LTS 版本),通过 npm 或 yarn 初始化项目。Vue.js 可通过 Vue CLI 快速搭建: npm…

vue弹幕实现暂停

vue弹幕实现暂停

实现 Vue 弹幕暂停功能 监听播放状态 通过 v-model 或自定义事件绑定弹幕组件的播放状态,存储一个布尔值(如 isPlaying)控制播放与暂停。在弹幕滚动逻辑中根据该状态判断是否更新位置。…

vue 实现筛选功能

vue 实现筛选功能

实现筛选功能的基本思路 在Vue中实现筛选功能通常涉及以下几个核心步骤:数据绑定、筛选逻辑处理、结果展示。以下是具体实现方法。 数据准备 准备需要筛选的数据源,通常是一个数组,可以存储在Vue组件的…