vue开发遇到多页分页选中并回显的需求,整理如下
<el-table
....
@select="handleSelect"
@select-all="handleSelectAll"
>
data数据
{
...
selectUsers: [], // 批量选择的用户
selectUsersTemparr: [],
}
methods:
handleSelect(data) {
// 本页选中的数据,翻页后依旧需要保留
// 方案就是 selectUsersTemparr
let hasExist = false
let hasExistIndex = 0
for (let i = 0, len = this.selectUsersTemparr.length; i < len; i++) {
if (this.selectUsersTemparr[i].curPageNum === this.currentPage) {
hasExist = true
hasExistIndex = i
break
}
}
if (hasExist) {
// 已经存在
this.selectUsersTemparr[hasExistIndex].curPageData = data
} else {
// 还不存在当页数据
this.selectUsersTemparr.push({
curPageNum: this.currentPage,
curPageData: data
})
}
// 先清空selectUsers
this.selectUsers = []
this.selectUsersTemparr.forEach((sItem) => {
this.selectUsers = this.selectUsers.concat(sItem.curPageData)
})
},
handleSelectAll(data) {
if (data.length) {
this.handleSelect(data)
} else {
let index = 0
for (let i = 0, len = this.selectUsersTemparr.length; i < len; i++) {
if (this.selectUsersTemparr[i].curPageNum === this.currentPage) {
index = i
break
}
}
this.selectUsersTemparr.splice(index, 1)
// 先清空selectUsers
this.selectUsers = []
this.selectUsersTemparr.forEach((sItem) => {
this.selectUsers = this.selectUsers.concat(sItem.curPageData)
})
}
},
// 获取接口后,调用该方法
defaultSelected() {
// 先看看当前页有没有选中项
let tarIndex = -1
for (let i = 0, len = this.selectUsersTemparr.length; i < len; i++) {
if (this.selectUsersTemparr[i].curPageNum === this.currentPage) {
tarIndex = i
}
}
if (
tarIndex !== -1 &&
this.selectUsersTemparr[tarIndex].curPageData.length
) {
// 说明当前页有选中项 把当前页选中项的index去都摘出来
const tempIndexArr = this.selectUsersTemparr[tarIndex].curPageData.map(
(tItem) => {
return tItem.index
}
)
tempIndexArr.forEach((iItem) => {
this.$refs.table.toggleRowSelection(this.tableData[iItem], true)
})
}
},
...
// 接口查询列表数据
getList(){
...
// 从接口得到列表数据content,需要与每页item赋值index索引,作为复选框回显标识
this.tableData = content.map((item, i) => {
item.index = i
})
this.$nextTick(()=>{
this.defaultSelected()
}
}