原因:设置
选中的行数据
与表格中的行数据
不是同一个数据(虽然数据一摸一样,但是内存指针不一样),所以导致直接使用选中的行数据
来设置可能会不生效
解决方案:通过循环
选中的行数据(multipleSelection)
,然后从表格所有数据(tableData)
中匹配 id 找到需要选中的项来帮助选中
toggleSelection() {
this.$nextTick(() => {
this.multipleSelection.map(row => {
this.$refs.table.toggleRowSelection(this.tableData.find(item => row.id == item.id), true); // 注意这里寻找的字段要唯一
});
})
})
通过
find()
方法,让表格(this.tableData)
去匹配选中的行数据(this.multipleSelection)
的数据,然后使用toggleRowSelection方法设置选中
总结:toggleRowSelection操作的数据和指针有关,我们只能操作当前表格的数据,虽然 toggleRowSelection 传入的
选中的行数据
和表格中的行数据
的某一项的数据一模一样,但是它们的指针不同,指向不同内存地址
如果选中的行数据
总数 大于
当前表格分页中的数据数量(比如第一页显示10条),可能会报错row is required when get row identity
原因:find 方法匹配不到数据会返回undefined,导致报错
解决方案:换一种循环查找方式
toggleSelection() {
this.$nextTick(() => {
for(let i = 0; i < this.multipleSelection.length; i++){
for(let j = 0; j < this.tableData.length; j++){
if(this.multipleSelection[i].id == this.tableData[j].id){
this.$refs.table.toggleRowSelection(this.tableData[j], true);
}
}
}
})
})
网友评论