1: template里 引入组件
<el-table ref='multipleTable' :data="tableData"></el-table>
2: 设置分页用的参数
data() {
return {
tableData: [],
multipleSelectionAll: [], // 所有选中的数据包含跨页数据
multipleSelection: [], // 当前页选中的数据
idKey: "id" // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
};
},
3:初始化获取tableData函数中调用翻页记忆功能函数
methods: {
init(){
setTimeout(() => {
this.setSelectRow();
}, 200);
},
// 翻页记忆选择功能
setSelectRow() {
if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
return;
}
// 标识当前行的唯一键的名称
let idKey = this.idKey;
let selectAllIds = [];
let _self = this;
this.multipleSelectionAll.forEach(row => {
selectAllIds.push(row[idKey]);
});
this.$refs.multipleTable.clearSelection();
for (var i = 0; i < this.tableData.length; i++) {
if (selectAllIds.indexOf(this.tableData[i][idKey]) >= 0) {
// 设置选中,记住table组件需要使用ref="multipleTable"
this.$refs.multipleTable.toggleRowSelection(this.tableData[i],true);
}
}
},
// 记忆选择核心方法
changePageCoreRecordData() {
// 标识当前行的唯一键的名称
let idKey = this.idKey;
let _self = this;
// 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
if (this.multipleSelectionAll.length <= 0) {
this.multipleSelectionAll = this.multipleSelection;
return;
}
// 总选择里面的key集合
let selectAllIds = [];
this.multipleSelectionAll.forEach(row => {
selectAllIds.push(row[idKey]);
});
let selectIds = [];
// 获取当前页选中的id
this.multipleSelection.forEach(row => {
selectIds.push(row[idKey]);
// 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
if (selectAllIds.indexOf(row[idKey]) < 0) {
_self.multipleSelectionAll.push(row);
}
});
let noSelectIds = [];
// 得到当前页没有选中的id
this.tableData.forEach(row => {
if (selectIds.indexOf(row[idKey]) < 0) {
noSelectIds.push(row[idKey]);
}
});
noSelectIds.forEach(id => {
if (selectAllIds.indexOf(id) >= 0) {
for (let i = 0; i < _self.multipleSelectionAll.length; i++) {
if (_self.multipleSelectionAll[i][idKey] == id) {
// 如果总选择中有未被选中的,那么就删除这条
_self.multipleSelectionAll.splice(i, 1);
break;
}
}
}
});
},
// 得到选中的所有数据
getAllSelectionData() {
// 再执行一次记忆勾选数据匹配,目的是为了在当前页操作勾选后直接获取选中数据
this.changePageCoreRecordData();
}
// 这块功能作者: Vicky丶Amor
//https://www.jianshu.com/p/4e029bb04634
},