解决element表格跨页面多选的另一种方案

本文介绍如何在Vue.js应用中,不依赖element-ui的reserve-selection特性,手动实现跨分页表格的多选功能。通过监听表格的selection-change事件,维护一个全局的选中数据列表,并在数据回显时重新设置选中状态。关键方法包括handleSelectionChange和handleEchoSelected,分别处理选中变化和回显数据的勾选。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在不使用 element 内部提供的reserve-selection属性的情况下,实现跨分页多选
模板代码代码如下:

<div class="table">
     <j-table ref="multipleTable" :data="tableData" :row-key="row=>row.id"  @selection-change="handleSelectionChange" >
        <j-table-column type="selection" width="55"></j-table-column>
        <j-table-column prop="realWarehouseCode" label="仓库编码" > </j-table-column>
         <j-table-column prop="realWarehouseName" label="仓库名称"> </j-table-column>
        <j-table-column prop="provinceName" label="所在城市" > </j-table-column>
        <j-table-column label="销售组织">
          <template slot-scope="scope">{{findLabelByVal(LegalPersonList,scope.row.inventoryOrgCode,'string')}}</template>
        </j-table-column>
     </j-table>
    </div>

接收父组件回显数据,及选中处理

 props: {
    selectedData: {
      type: Array,
      default: null
    }
  },
 data(){
 return {
 	tableData: [],
    selectedTableData: [],
 }
 },

methods:{
     //选中回调
      handleSelectionChange (selection) {
      // 当选中数组为空的时候
      if (this.selectedTableData.length === 0) {
        this.selectedTableData = selection
        return
      }
      // 所有选中选项
      const allItems = _.cloneDeep(this.selectedTableData)
      // 当前页面数据 id集合
      const currentTableData = _.cloneDeep(this.tableData).map(i => i.id)
      // 非当前页选中数据
      const noCurrentPageSelect = allItems.filter(i => !currentTableData.includes(i.id))
      // 因为selection 仅返回当前页的所有选中数据,我们更新当前页选中数据就可以了
      this.selectedTableData = [...noCurrentPageSelect, ...selection]
    },
    // 勾选
    handleEchoSelected (currentList, allList) {
      const allListIds = allList.map(i => i.id)
      currentList.forEach(i => {
        // 回显当前页的数据勾选
        if (allListIds.includes(i.id)) {
          this.$nextTick(() => {
            this.$refs.multipleTable.toggleRowSelection(i, true)
          })
        }
      })
    },
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值