el-table多选框设置默认选中,翻页保留选中状态

最近碰到个需求,el-table列表渲染数据,要求有多选框并且附带默认选中,翻页后保留选中状态
写默认选中时百度一下还很简单,但是碰到个bug,第一次翻页可以保留,第二次翻页回来之后选中的就没了。
经过研究解决,记录一下,直接上代码了
默认选中只需要给table增加

 :row-key="getRowKeys"
:reserve-selection="true"

然后列表获取数据时用这个方法,我这里是默认选中row.number == 9的数据,

  this.$nextTick(() => {
        let table = this.tableData; 
        table.forEach(row => {
          if (row.number == 9)
            this.$refs.table.toggleRowSelection(row, true);
        });
      });

完整代码

<template>
  <div>
    <div style="width: 80%; margin: 20px auto">
      <div v-for="item in multipleSelection" :key="item.id">
        {{ item.name }}
      </div>
      <el-table
        :row-key="getRowKeys"
        border
        ref="table"
        :data="tableData"
        style="width: 100%"
        @selection-change="handleSelectionChange"
      >
        <el-table-column
          :reserve-selection="true"
          type="selection"
          width="55"
        />
        <el-table-column property="id" label="id" width="55" />
        <el-table-column property="name" label="name" />
        <el-table-column property="number" label="number" />
        <el-table-column property="desc" label="desc" />
      </el-table>
      <el-pagination
        :current-page="page"
        :page-sizes="[10, 20, 30]"
        background
        layout="total, sizes, prev, pager, next, jumper"
        :total="Number(totals)"
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
      />
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableData: [],
      multipleSelection: [],
      page: 1,
      pageSize: 10,
      totals: ''
    }
  },
  methods: {
    SelectionChange() {
      this.$nextTick(() => {
      //这里把数据重新赋值一下,不然就会出现bug,从第一页翻到第二页可以保留,在回到第一页选中的就没了
        let table = this.tableData; 
        table.forEach(row => {
          if (row.number == 9)
            this.$refs.table.toggleRowSelection(row, true);
        });
      });
    },

    handleSelectionChange(e) {
      this.multipleSelection = e
    },
    // 获取列表数据
    getDemoList() {
      let param = {
        page: this.page,
        pageSize: this.pageSize
      }
      this.$axios.post('/api/getList', param).then((res) => {
        this.tableData = res.data.data.list
        this.totals = res.data.data.total
        this.SelectionChange()
      })
    },
    getRowKeys(row) {
      return row.id
    },
    handleCurrentChange(page) {
      this.page = page
      this.getDemoList()
    },
    handleSizeChange(pageSize) {
      this.pageSize = pageSize
      this.getDemoList()
    }
  },
  mounted() {
    this.getDemoList()
    
  }
}
</script>
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值