网站搜索

javascript - 如何在 mat-table 页变化时选中复选框?


我正在使用 Angular Material 开发一个表格,用户可以通过复选框选择行。到目前为止,当表格包含所有数据时,逻辑运行良好,翻页也不会影响选择。但是,当我切换到服务端分页时,dataSource 变成了动态的,复选框在返回到之前/下一页已选中的行时没有在视图中显示。我已经检查过,即使在翻页时,selection.selected 仍然保存着值,但问题是为什么它没有在视图中显示。

private setupCheckboxIfPageChange() {
  console.log(1);
  const selected: TestTable[] = this.selection.selected;
  this.selection.clear();
  this.selection.select(...selected);
}

这个函数是我写的,并在 API 订阅中调用。这是我尝试的示例。

答案#1

它不起作用是因为 SelectionModel 默认使用严格相等(===),而你在模型中存储的是对象。当你使用两个由不同 API 调用返回的独立对象时,即使所有属性相同,它们也永远不会相等。为避免此问题,你应该只在选择模型中存储所选项的 ID。这也会让你的应用更快,因为内存中存储的数据更少。

更新的 Stackblitz: https://stackblitz.com/edit/stackblitz-starters-gxci92

如果你需要选择模型保存整个对象,请查看另一个答案。

答案#2

你可以在 ngOnInit() 中添加

this.selection.compareWith=(a:TestTable,b:TestTable)=>a.id==b.id;

否则,由于对象不同,结果为假