首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何添加角材料表SelectionModel的初始选择?

如何添加角材料表SelectionModel的初始选择?
EN

Stack Overflow用户
提问于 2018-09-04 20:37:13
回答 5查看 26.7K关注 0票数 17

角材料文档为如何将选择添加到表(表格选择文档)提供了一个很好的示例。他们甚至提供了一个斯塔克布利茨来尝试它。

我在SelectionModel构造函数的代码中发现,第一个参数是是否可以有多个选择(真)(真)(假)。第二个参数是一个最初选定值的数组。

在演示中,它们没有任何最初选定的值,因此构造函数中的第二个参数(第36行)是一个空数组([])。

我想要更改它,以便有一个最初选定的值,因此我将第36行更改为:

代码语言:javascript
复制
selection = new SelectionModel<PeriodicElement>(true, [{position: 2, name: 'Helium', weight: 4.0026, symbol: 'He'}]);

这会将标题中的复选框更改为不确定状态(如预期的那样),但不会导致选中表中的行。我是不正确地设置初始值,还是这里遗漏了什么?如何设置最初选定的值?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-11-09 09:22:24

棘手的那个。您需要通过从PeriodicElement输入中提取特定的dataSource对象并将其传递给构造函数来初始化所选内容。

在这种情况下,您可以编写

代码语言:javascript
复制
selection = new SelectionModel<PeriodicElement>(true, [this.dataSource.data[1]);

这是因为SelectionModel检查活动选择的方式。

在表标记中

代码语言:javascript
复制
<mat-checkbox ... [checked]="selection.isSelected(row)"></mat-checkbox>

您期望此绑定将相应的行标记为“选中”。但是方法isSelected(row)不会识别在这里传递的对象是被选中的,因为这不是您的选择在其构造函数中接收到的对象。

"row“指向实际MatTableDataSource输入中的对象:

代码语言:javascript
复制
dataSource = new MatTableDataSource<PeriodicElement>(ELEMENT_DATA);

但是选择初始化:

代码语言:javascript
复制
selection = new SelectionModel<PeriodicElement>(true, [{position: 2, name: 'Helium', weight: 4.0026, symbol: 'He'}]);

在动态创建的新对象中发生。您的选择将此对象记为选定对象。

当角计算标记中的绑定时,SelectionModel内部检查对象标识。它将在所选对象的内部集合中查找"row“指向的对象。

SelectionModel源代码中的第99-101和第16行相比:

代码语言:javascript
复制
isSelected(value: T): boolean {
  return this._selection.has(value);
}

代码语言:javascript
复制
private _selection = new Set<T>();
票数 23
EN

Stack Overflow用户

发布于 2020-10-10 04:22:51

我也面临同样的问题,我使用dataSource在ngOnInit()中手动设置初始值。

代码语言:javascript
复制
ngOnInit() {
    this.dataSource.data.forEach(row => {
      if (row.symbol == "H") this.selection.select(row);
    });
  }
票数 3
EN

Stack Overflow用户

发布于 2019-05-20 06:55:20

如果您执行以下操作,它也会工作。

代码语言:javascript
复制
selection = new SelectionModel<PeriodicElement>(true, [ELEMENT_DATA[1]])

选择您所能做的一切

代码语言:javascript
复制
selection = new SelectionModel<PeriodicElement>(true, [...ELEMENT_DATA])

我希望答案是有帮助的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52173675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档