赶时间,直接上代码。
逻辑就是,多选的数组,通过分页,保存到一个对象里,类似这样
selectRowObj: {
1: [],
2: []
}
<template>
<el-table
ref="table"
:data="list"
:height="tableHeight"
element-loading-text="Loading"
stripe
fit
highlight-current-row
@selection-change="handleTableSelect"
>
.....
.....
</el-table>
</template>
method: {
handleTableSelect(val) {
// 加载列表的时候,拦截
if (this.isRefreshTableData) {
this.isRefreshTableData = false
return
}
// 根据分页,保存选中数据
this.$set(this.selectRowObj, this.pagger.current, val)
},
// 表格回显数据
callBackTableData() {
const selectionRows = []
// 缓存的对象,通过分页下表取出选中的列表
const cachRows = this.selectRowObj[this.pagger.current]
// 判断选中的列表是否为空
if (cachRows && cachRows.length > 0) {
// 遍历数组,将原始数据list,符合要求的数据添加到空数组里
// toggleRowSelection 只能用原始数据
cachRows.forEach((cachItem) => {
this.list.forEach(item => {
if (cachItem.secSource === item.secSource) {
selectionRows.push(item)
}
})
})
// 遍历勾选
selectionRows.forEach(item => {
this.$refs.table.toggleRowSelection(item)
})
} else {
// 清空选中
this.$refs.table.clearSelection()
}
},
// 获取列表数据
async getList() {
const res = await xxxx()
.....
// 渲染成功后,再回显数据,防止refs获取不到table
this.$nextTick(() => {
this.callBackTableData()
})
},
// 分页方法
changePagination() {
this.isRefreshTableData = true
this.getList()
}
}
网友评论