重点代码以及逻辑:
<el-table
row-key="id"
@selection-change="handleSelectionChange">
<el-table-column
prop=""
type="selection"
:reserve-selection="true">
</el-table-column>
</el-table>
// 设置默认勾选
// 如果当页数据存在于selectedItemList,则勾选
// 注意:要按照接口顺序来,不能按照列表顺序来
setSelction(selectedItem,item){
// 选中项id
var selectedId = [];
var _this = this;
selectedItem.forEach(function(selectedItem){
item.forEach(function(listItem){
if(selectedItem.id == listItem.id){
_this.$refs.itemTable.toggleRowSelection(listItem,true);
}
})
})
},
handleSelectionChange: function(selection){
// 保留selectedItemList中 1、不存在于当页 2、不存在于selection的数据。其他的直接替换成selection。
var _this = this;
var keepItem = [];
var preSelectedItem = this.selectedItemList;
var preSelectedId = [];
var selectionId = [];
var itemId = [];
selection.forEach(function(item){
selectionId.push(item.id)
})
this.itemList.forEach(function(item){
itemId.push(item.id)
})
preSelectedItem.forEach(function(item){
preSelectedId.push(item.id)
})
// 若selection在右侧不存在,则添加(selection有,右侧没有;selection没有,右侧有)
// 若已经存在,则不添加
preSelectedItem.forEach(function(item){
if(selectionId.indexOf(item.id) == -1){
if(itemId.indexOf(item.id) == -1){
keepItem.push(item)
}
}
})
_this.selectedItemList = keepItem.concat(selection);
},