element表格,后端分页时,实现分页多选功能。

element表格,后端分页时,实现分页多选并记忆选项功能。

现在当前端数据量大的时候,一般表格的分页都是由后端类做。每次请求后端都只返回当前页的数据,element表格官方的多选例子,没办法实现分页多选,返回上一页时还要把之前选择的选项勾选的功能。下面类解决这个问题。

基本思路

  1. 创建一个数组,使它每项为一页所选择的选择项数据数组选择项改变时,去更新对应项的数组。例如:
data:(){
	return{ 
		selectionArr:[
			[{id:1},{id:2},{id:4}], //第一页所选择的数组
			
			[{id:6},{id:7}], //第二页所选择的数组
			
			[{id:11},{id:12},{id:13}], //第三页所选择的数组
			//...
		],
		page :1, //当前页码。
},

methods: {
//@selection-change 事件函数
    handleSelectionChange(selection) {
      this.selectionArr[this.page - 1] = selection;
    },
}
  1. 切换页码后,等数据加载完,查找selectionArr中当前页有无被选中的选择项数据。如果有,将数据勾选上。

  2. 注意事项
    (1) 使用 toggleRowSelection事件函数时,参数必须是原数据。

var tableDate= [
{id:1}
]
//正确示例
this.$refs.table.toggleRowSelection(tableDate[0]);

//错误示例
this.$refs.table.toggleRowSelection({id:1});

(2)不要使用@selection-change 事件,因为当使用toggleRowSelection事件勾选选择项时会触发@selection-change 事件,重复触发。使用**@select-all+@select** 事件,这两个事件为当用户手动勾选数据行或全选的 Checkbox 时触发的事件,使用toggleRowSelection事件不会被触发。

完整代码

<template>
  <div>
    <el-table
      :data="tableDate"
      ref="table"
      @select="handleSelectionChange"
      @select-all="handleSelectionChange"
    >
    
      <el-table-column type="selection" width="55"> </el-table-column>

      <el-table-column prop="name" label="名称" ></el-table-column>
      
    </el-table>
    
    <el-pagination
      @size-change="handleChangePagination"
      @current-change="handleChangePagination"
      :current-page.sync="paginationData.page"
      :page-sizes="[2, 5, 10, 20, 50]"
      :page-size="paginationData.page_size"
      layout="total,sizes, prev, pager, next, jumper"
      :total="total"
    >
    </el-pagination>
  </div>
</template>


<script>

export default {
  data() {
    return {
    tableDate:[],
    total:0,
      paginationData: {
        page: 1,
        page_size: 2,
      },
      arrSelection: [],
    };
  },


  methods: {
    handleSelectionChange(selection) {
      this.arrSelection[this.filterData.page - 1] = selection;
    },
    SaveTheSelectionResult() {
      if (this.arrSelection[this.filterData.page - 1]) {
        this.arrSelection[this.filterData.page - 1].forEach((value) => {
          this.tableDate.forEach((val, index) => {
            if (value.id === val.id) {
              this.$refs.table.toggleRowSelection(this.tableDate[index], true);
            }
          });
        });
       
      }
    },
    handleChangePagination() {
      this.$http.get('你自己的网址').then((response)=>{
          this.tableDate = response.data.tableDate;
          this.total = response.data.total;
          this.SaveTheSelectionResult()
    })
    },
  },
  mounted() {
	this.handleChangePagination() 
  },
};
</script>


有更好的方法或有问题可以留言。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值