antd-vue Table组件selectedRows翻页后不保留上一页已选

官方组件的onChange方法在分页重新加载数据的时候,会将selectedRows清空,所以不使用onChange的方案操作selectedRows数据,而是使用其他事件onSelectonSelectAll来进行修改
代码如下

....
      <s-table
        ref="table"
        size="default"
        rowKey="key"
        :columns="columns"
        :data="loadData"
        :rowSelection="{
          selectedRowKeys: selectedRowKeys,
          onChange: onSelectChange,
           onSelect:onSelect,
            onSelectAll:onSelectAll,
        }"
        :customRow="handleCheck"
      ></s-table>
....
<script>
....
import { STable } from '@/components'
....
export default {
....
  methods:{
    onSelectChange(selectedRowKeys, selectedRows) {
      this.selectedRowKeys = selectedRowKeys
      // this.selectedRows = selectedRows // 注释这里,交由下面onSelect,onSelectAll来操作
    },
    onSelect(record, selected, selectedRows) {
      if (selected) {
        this.selectedRows.push(record)
      }

      if (!selected) {
        const delIndex = this.selectedRows.findIndex(val => {
          return val.id === record.id
        })
        this.selectedRows.splice(delIndex, 1)
      }
    },
    onSelectAll(selected, selectedRows, changeRows) {
      if (selected) {
        this.selectedRows = this.selectedRows.concat(changeRows)
      }
      if (!selected) {
        let selectedRows = JSON.parse(JSON.stringify(this.selectedRows))
        const delIndex = []
        selectedRows.forEach((item, index) => {
          changeRows.forEach((val, itemIndex) => {
            if (item.id === val.id) {
              delIndex.push(index)
            }
          })
        })
        delIndex.forEach(item => {
          delete selectedRows[item]
        })
        selectedRows = selectedRows.filter(item => {
          return item !== undefined
        })
        this.selectedRows = selectedRows
      }
    },
  }
.....
}
.....
</script>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容