Skip to content

解决跨页选择后对数据判断的问题

使用 ant-design-vuetable 表格组件,当前 listData 是只存储了当前页的数据,跨页时会重新请求数据并覆盖。

问题

跨页选择数据后跳转新页面前要对勾选的数据进行判断,而 table 自带的勾选只能勾选当前行数据的 key 值,如何在 listData 不断变化的情况下判断 key 值对应的数据的某个属性?

思路

在勾选的时候进行判断,并存储对应的数据至 checkList 数组里面,在跳页面前循环遍历 checkList 数组的某个属性进行判断即可。

好处:避免多次请求同一个分页接口

坏处:前端要进行数据处理

实现

html
<a-table
    :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
    :columns="columns"
    :data-source="listData"
    :pagination="false"
    :locale="locale"
></table>
js
onSelectChange(value) {
    //listData:当前分页的数据
    //checkList:通过勾选获取的id,存储勾选数据的详情
    //selectedRowKeys:存储勾选获取的key数组
    //value:获取勾选后的key数组
  if (value?.length > this.selectedRowKeys?.length) {
    value?.forEach(v => {
      let obj = this.listData.find((item) => item.id == v);
      if (obj && !this.checkList.find((item) => item.id == v)) {
        this.checkList.push(obj)
      }
    })
  }
  else if (value?.length == 0) this.checkList = [];
  else if (value?.length < this.selectedRowKeys?.length) {
    let list = this.selectedRowKeys.filter(item => {
      return value.indexOf(item) === -1
    });
    console.log(list);
    let finalArr = this.checkList.filter((item) => !list.includes(item.id));
    this.checkList = finalArr;
  }
  this.selectedRowKeys = value
},