需求:使用el-table,分页从服务端请求数据,默认选中全部分页勾选项。
一、在此之前,实现选中当前页全部勾选项
方式一:请求数据之后,toggleAllSelection
方式二:请求数据之后,toggleRowSelection
但这两种方式都有弊端,首先:无法反显勾选项,你可能会使用以下方式解决:
row-key 结合 reserve-selection,selection-change
但同样有问题,切换分页时,会有全部不勾选的情况,也会有方式二【selection-change】不生效的问题。
二、正确解决思路
记录未勾选项。
网络请求后,便可拿到总数据条数,已选中N条数据 = 总数据条数 - 未勾选项。
核心代码:
@select="rowSelection" @select-all="selectAll"
http响应: that.$nextTick(()=>{ that.dataList.forEach(item => { //添加勾选字段,并初始化 if(that.multipleUnSelection.includes(item.id)){ item.check = false; }else{ item.check = true; this.$refs.staffChangedTable.toggleRowSelection(item, true); } }) })
// 手动勾选数据行 rowSelection(selection, row){ row.check = !row.check; if(row.check){ //todo选中项若在未选中项集合内,则删除 }else { //todo未选中项不在未选中项集合内,则添加 } },
// 手动勾选全选 selectAll(selection){ if(selection.length > 0) {//全选,从未勾选集合里删除 selection.forEach(item => { if(this.multipleUnSelection.includes(item.id)){//todo在未选中集合里,删除 } }); }else{//todo取消全选,添加到未勾选集合 } },