【发布时间】:2019-07-16 10:51:17
【问题描述】:
PS:我是 Angular 和 JS 的新手。
在我的新 angular 7 项目中,我有一个 材料数据表 组件。通过 REST API,在进行 GET 调用后,我能够填充所需对象的数组。这一切都发生在组件的ngOnInit 方法中。 (不包括代码,因为它无关紧要)。
我的问题是,如何将数组绑定到数据表的dataSource?在数据表的 HTML 中,我在顶部有:
<table mat-table [dataSource]="dataSource" matSort aria-label="Elements">
....
....
<td mat-cell *matCellDef="let row">{{row.id}}</td>
</...>
在..DataSource.ts 文件中,我有一些属性和connect、disconnect 方法定义如下:
export class TestTableItem {
id: number;
}
export class TestTableDataSource extends DataSource<TestTableItem> {
paginator: MatPaginator;
sort: MatSort;
constructor(private TestArray: any[]) {
super();
}
connect(collections: CollectionViewer): Observable<TestTableItem[]> {
return observableOf<TestTableItem[]>(this.TestArray);
}
disconnect() {}
在component.ts 中,我声明了dataSource 属性,如上所述,我在ngOnInit() 方法中填充数组,如下所示:
private myCollection: TestTableItem[] = [];
dataSource = new MatTableDataSource(this.myCollection);
ngOnInit() {
...
//adding new item to myCollection
}
那么,最后,我如何将数组绑定到表?我尝试在ngOnInIt 方法中将new TestTableDataSource(this.myCollection); 传递给this.dataSource,但它失败了,因为dataSource 和TestTableDataSource 属于不同的类型。
不确定我是否能够正确地表达这些词,但我希望读者能明白我的意思。任何指示将不胜感激。
更新
如果我将dataSource定义为TestTableDataSource,如下:
dataSource: TestTableDataSource;
代码运行良好。但是,该表仍然是空的。有趣的是,进行此更改还会删除表的所有列。表格变得完全空白。为什么即使myCollection 不为空也会发生这种情况?
【问题讨论】:
-
TestTableDataSource的目的是什么?我认为不需要。您想要的是将来自 Rest API 的返回数组绑定到表的数据源。我对吗?如果是,那么在ngOnInit上,当您的 api 中的数组被填充时(我们称之为 myArr),您只需从该数组初始化表的数据源,就像这样this.dataSource = new MatTableDataSource(myArr); -
@leopal,你说得对!我建议您将其添加为答案。谢谢大佬!
标签: javascript angular typescript angular-material