当前位置:首页 > VUE

Vue中table实现CheckBox

2026-02-22 09:27:00VUE

Vue中实现Table的CheckBox功能

在Vue中为表格添加CheckBox功能,可以通过以下方式实现。这里以Element UI的el-table为例,原生表格的实现逻辑类似。

基础实现

定义表格数据时,为每行添加一个selected属性用于绑定CheckBox状态:

data() {
  return {
    tableData: [
      { id: 1, name: '张三', selected: false },
      { id: 2, name: '李四', selected: false }
    ]
  }
}

在模板中使用el-table-column渲染CheckBox列:

<el-table :data="tableData">
  <el-table-column width="50">
    <template #default="{ row }">
      <el-checkbox v-model="row.selected" />
    </template>
  </el-table-column>
  <el-table-column prop="name" label="姓名" />
</el-table>

全选功能实现

添加表头CheckBox实现全选功能:

Vue中table实现CheckBox

<el-table :data="tableData" @select-all="handleSelectAll">
  <el-table-column width="50">
    <template #header>
      <el-checkbox v-model="selectAll" @change="toggleSelectAll" />
    </template>
    <template #default="{ row }">
      <el-checkbox v-model="row.selected" @change="updateSelectAll" />
    </template>
  </el-table-column>
  <!-- 其他列 -->
</el-table>

对应的JavaScript逻辑:

data() {
  return {
    selectAll: false
  }
},
methods: {
  toggleSelectAll(val) {
    this.tableData.forEach(item => {
      item.selected = val
    })
  },
  updateSelectAll() {
    this.selectAll = this.tableData.every(item => item.selected)
  }
}

获取选中项

添加方法获取当前选中的行数据:

Vue中table实现CheckBox

methods: {
  getSelectedRows() {
    return this.tableData.filter(row => row.selected)
  }
}

性能优化

对于大数据量的表格,使用计算属性优化选中状态判断:

computed: {
  selectedCount() {
    return this.tableData.filter(item => item.selected).length
  },
  isIndeterminate() {
    return this.selectedCount > 0 && this.selectedCount < this.tableData.length
  }
}

在模板中使用这些计算属性:

<el-checkbox
  v-model="selectAll"
  :indeterminate="isIndeterminate"
  @change="toggleSelectAll"
/>

原生表格实现

不使用UI框架时,原生实现方式:

<table>
  <thead>
    <tr>
      <th><input type="checkbox" v-model="selectAll" @change="toggleSelectAll"></th>
      <th>姓名</th>
    </tr>
  </thead>
  <tbody>
    <tr v-for="(item, index) in tableData" :key="index">
      <td><input type="checkbox" v-model="item.selected" @change="updateSelectAll"></td>
      <td>{{ item.name }}</td>
    </tr>
  </tbody>
</table>

JavaScript逻辑与上述Element UI示例类似。

标签: Vuetable
分享给朋友:

相关文章

Vue实现lagger页面

Vue实现lagger页面

Vue实现懒加载页面的方法 懒加载(Lazy Loading)是一种优化技术,用于延迟加载非关键资源,从而提升页面初始加载速度。在Vue中可以通过以下方式实现懒加载: 路由懒加载 使用Vue Rou…

vue table实现折叠

vue table实现折叠

实现折叠表格的基本思路 在Vue中实现表格折叠功能,可以通过动态控制行的显示与隐藏来完成。常见做法是结合v-if或v-show指令,配合数据状态管理来实现。 使用v-show实现简单折叠 通过v-s…

Vue全局loading实现

Vue全局loading实现

Vue全局Loading的实现方法 使用Vue插件封装全局Loading组件 创建一个独立的Loading组件,通过Vue插件机制注册为全局组件或方法。 <template> &…

Vue实现位置切换

Vue实现位置切换

Vue实现元素位置切换的方法 在Vue中实现元素位置切换可以通过多种方式实现,以下列出几种常见方法: 使用v-if/v-else指令 通过条件渲染切换两个元素的位置,适合简单场景: <…

Vue实现酷炫

Vue实现酷炫

Vue实现酷炫效果的方法 使用Vue.js可以轻松实现各种酷炫的交互效果和动画。以下是几种常见的实现方式: 使用Vue过渡和动画 Vue提供了内置的过渡和动画系统,可以通过<transitio…

Vue实现禁止截屏

Vue实现禁止截屏

防止截屏的常见方法 在Vue中实现禁止截屏的功能,可以通过以下几种方式来实现。需要注意的是,完全防止截屏在技术上是不现实的,但可以增加截屏的难度或通过其他手段进行限制。 使用CSS禁止用户选择文本和…