当前位置:首页 > VUE

vue实现表格选择

2026-03-09 09:22:52VUE

Vue 实现表格选择功能

在 Vue 中实现表格选择功能通常需要结合组件库或自定义逻辑。以下是几种常见实现方式:

使用 Element UI 的表格选择功能

Element UI 提供了内置的表格选择功能,只需简单配置即可实现:

vue实现表格选择

<template>
  <el-table
    ref="multipleTable"
    :data="tableData"
    @selection-change="handleSelectionChange">
    <el-table-column type="selection" width="55"></el-table-column>
    <el-table-column prop="name" label="姓名"></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [{name: '张三'}, {name: '李四'}],
      selectedItems: []
    }
  },
  methods: {
    handleSelectionChange(val) {
      this.selectedItems = val
    }
  }
}
</script>

自定义实现表格选择

如果需要更灵活的控制,可以自定义选择逻辑:

<template>
  <table>
    <tr v-for="(item, index) in tableData" :key="index">
      <td>
        <input 
          type="checkbox" 
          v-model="item.selected"
          @change="updateSelection">
      </td>
      <td>{{ item.name }}</td>
    </tr>
  </table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        {name: '张三', selected: false},
        {name: '李四', selected: false}
      ]
    }
  },
  methods: {
    updateSelection() {
      const selectedItems = this.tableData.filter(item => item.selected)
      console.log(selectedItems)
    }
  }
}
</script>

实现全选功能

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

vue实现表格选择

<template>
  <div>
    <input type="checkbox" v-model="selectAll" @change="toggleSelectAll">
    <table>
      <!-- 表格内容同上 -->
    </table>
  </div>
</template>

<script>
export default {
  computed: {
    selectAll: {
      get() {
        return this.tableData.every(item => item.selected)
      },
      set(value) {
        this.tableData.forEach(item => {
          item.selected = value
        })
      }
    }
  },
  methods: {
    toggleSelectAll() {
      this.tableData.forEach(item => {
        item.selected = this.selectAll
      })
    }
  }
}
</script>

使用 Vuex 管理选择状态

在大型应用中,可以使用 Vuex 集中管理选择状态:

// store.js
export default new Vuex.Store({
  state: {
    tableData: [],
    selectedItems: []
  },
  mutations: {
    updateSelection(state, payload) {
      state.selectedItems = payload
    }
  }
})
<!-- 组件中 -->
<script>
import { mapState, mapMutations } from 'vuex'

export default {
  computed: {
    ...mapState(['selectedItems'])
  },
  methods: {
    ...mapMutations(['updateSelection']),
    handleSelectionChange(items) {
      this.updateSelection(items)
    }
  }
}
</script>

响应式选择功能优化

为提升性能,可以使用计算属性和 watch 来优化选择逻辑:

export default {
  data() {
    return {
      tableData: [] // 初始数据
    }
  },
  computed: {
    selectedCount() {
      return this.tableData.filter(item => item.selected).length
    }
  },
  watch: {
    selectedCount(newVal) {
      console.log(`当前选中了${newVal}项`)
    }
  }
}

以上方法可以根据具体需求选择或组合使用,Element UI 方案适合快速开发,自定义方案则提供更大灵活性。

标签: 表格vue
分享给朋友:

相关文章

vue弹幕实现不重叠

vue弹幕实现不重叠

实现 Vue 弹幕不重叠的方法 CSS 定位与动画控制 通过绝对定位和动态计算弹幕轨道高度,确保弹幕在不同轨道上运行。每条弹幕占据固定高度的轨道,避免重叠。 // 弹幕轨道高度计算 const tr…

vue设计与实现目录

vue设计与实现目录

以下是《Vue设计与实现》一书的典型目录结构(根据常见技术书籍及Vue核心内容整理): 响应式系统 响应式数据的基本原理 依赖收集与触发更新 实现简易响应式系统 Proxy与Reflec…

vue树形实现

vue树形实现

Vue 树形组件实现方法 使用递归组件实现树形结构 递归组件是 Vue 中实现树形结构的常见方法。通过组件调用自身的方式,可以轻松构建多层嵌套的树形结构。 <template> &l…

vue实现答辩

vue实现答辩

Vue 实现答辩系统的关键步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目,安装 Vue Router 管理路由,Pinia/Vuex 进行状态管理。配置 ESLint 和 Pre…

vue实现123456

vue实现123456

Vue 实现数字 123456 的显示 在 Vue 中显示数字 123456 非常简单,可以通过以下方法实现: 方法一:直接在模板中显示 <template> <div>…

vue实现评分

vue实现评分

Vue 实现评分功能 使用组件库实现 安装 element-ui 或 ant-design-vue 这类 UI 库,它们已经内置了评分组件。 以 element-ui 为例: <te…