当前位置:首页 > VUE

vue表单全选实现

2026-02-17 19:43:25VUE

Vue 表单全选实现方法

基础实现(基于 v-model)

通过绑定一个全选复选框的 v-model 与子选项的选中状态实现联动:

<template>
  <div>
    <label>
      <input type="checkbox" v-model="selectAll" @change="toggleAll">
      全选
    </label>
    <div v-for="item in items" :key="item.id">
      <label>
        <input type="checkbox" v-model="selectedItems" :value="item.id">
        {{ item.name }}
      </label>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: '选项1' },
        { id: 2, name: '选项2' },
        { id: 3, name: '选项3' }
      ],
      selectedItems: []
    }
  },
  computed: {
    selectAll: {
      get() {
        return this.selectedItems.length === this.items.length
      },
      set(value) {
        this.selectedItems = value ? this.items.map(item => item.id) : []
      }
    }
  },
  methods: {
    toggleAll() {
      this.selectAll = !this.selectAll
    }
  }
}
</script>

动态计算实现

通过计算属性动态判断全选状态,适用于异步加载数据场景:

<template>
  <!-- 同上模板结构 -->
</template>

<script>
export default {
  data() {
    return {
      items: [],
      selectedItems: []
    }
  },
  computed: {
    selectAll() {
      return this.items.length > 0 && 
             this.selectedItems.length === this.items.length
    }
  },
  methods: {
    handleSelectAll() {
      if (this.selectAll) {
        this.selectedItems = []
      } else {
        this.selectedItems = [...this.items.map(item => item.id)]
      }
    }
  }
}
</script>

表格场景实现

适用于表格行的批量选择,结合 el-checkbox(Element UI 示例):

<template>
  <el-table :data="tableData">
    <el-table-column type="selection" width="55" :selectable="selectable">
    </el-table-column>
    <!-- 其他列 -->
  </el-table>
</template>

<script>
export default {
  methods: {
    selectable(row, index) {
      return row.status === 'active' // 可添加选择条件
    },
    handleSelectionChange(val) {
      this.selectedItems = val
    }
  }
}
</script>

性能优化方案

对于大数据量场景,采用虚拟滚动时建议使用以下策略:

vue表单全选实现

// 在数据量较大时使用 Set 存储选中项
data() {
  return {
    selectedSet: new Set()
  }
},
methods: {
  toggleSelection(id) {
    this.selectedSet.has(id) 
      ? this.selectedSet.delete(id) 
      : this.selectedSet.add(id)
  },
  selectAllItems() {
    this.items.forEach(item => this.selectedSet.add(item.id))
  }
}

注意事项

  • 当存在分页时,需要区分当前页全选和全局全选
  • 异步加载数据时需要重置全选状态
  • 使用 deep: true 监听数组变化时可能影响性能
  • 对于禁用项需要额外处理 selectable 逻辑

以上方法可根据具体业务需求组合使用,建议通过 Vue Devtools 调试选中状态的变化过程。

标签: 表单全选
分享给朋友:

相关文章

vue实现切换表单

vue实现切换表单

Vue 实现表单切换的方法 动态组件切换 使用 Vue 的 <component :is="currentComponent"> 动态加载不同表单组件,通过 v-model 绑定数据。…

vue实现表单全选

vue实现表单全选

Vue 实现表单全选功能 在 Vue 中实现表单全选功能,可以通过绑定数据和事件来实现。以下是具体实现方法: 使用 v-model 绑定数据 在 Vue 模板中,使用 v-model 绑定一个数组来…

vue实现全选 多选

vue实现全选 多选

Vue实现全选与多选功能 在Vue中实现全选和多选功能通常涉及数据绑定、事件处理和状态管理。以下是两种常见的实现方式: 基于v-model的双向绑定 使用v-model绑定复选框组,结合计算…

vue 实现列表全选

vue 实现列表全选

实现列表全选功能 在Vue中实现列表全选功能,可以通过绑定数据和事件处理来实现。以下是一个完整的示例代码: <template> <div> <in…

vue实现复选全选

vue实现复选全选

Vue 实现复选全选功能 在 Vue 中实现复选全选功能,可以通过数据绑定和计算属性来管理选中状态。以下是一个完整的实现方案: 数据准备 data() { return { it…

vue实现登录表单验证

vue实现登录表单验证

表单结构设计 使用Vue的v-model指令绑定表单数据,结合HTML5原生验证属性(如required、pattern)实现基础验证。表单通常包含用户名、密码等字段: <template&g…