我有一个Angular2组件在表格中显示一些数据。
export class DiagnosisComponent {
headers: Array<String> = ["hello world", "hello world"];
table: Observable<TableData>;
constructor(private eventService: EventService) {
this.table = this.eventService.getDiagnosisEvents();
this.table.subscribe(console.log.bind(console));
}
}
这是TableData类
export class TableData {
content: Array<any>;
paging: Paging;
constructor(obj: any) {
this.paging = {
size: obj.size,
totalElements: obj.totalElements,
currentPage: 1
};
this.content = obj.content;
}
}
export interface Paging {
size: number;
totalElements: number;
currentPage: number;
}
现在我想将table.content数组绑定到带有异步管道的* ngFor。我的问题是我需要获取嵌套数据,而不是TableData本身。
<div class="row">
<vpscout-filter></vpscout-filter>
<table class="table">
<thead>
<tr><th *ngFor="let header of headers">{{header | translate}}</th></tr>
</thead>
<tbody>
<tr *ngFor="let row of table | async ">
<td>test</td>
</tr>
</tbody>
</table>
</div>
将* ngFor更改为<tr *ngFor="let row of table.content | async ">
不起作用。
答案 0 :(得分:12)
我解决了类似的问题:
<tr *ngFor="let row of (table | async)?.content ">
<td>test</td>
</tr>
因为我正在为项目使用immutableJs并将可观察数据转换为map,所以对我有用的确切解决方案是:
<tr *ngFor="let row of (table | async)?.get('content') ">
<td>test</td>
</tr>
答案 1 :(得分:1)
您可以为内容创建新字段:
this.table.subscribe((data)=>{
this.tableContent = data.content
});
并将该新字段绑定到*ngFor
<tbody *ngIf="tableContent">
<tr *ngFor="let row of tableContent">
<td>test</td>
</tr>
</tbody>
答案 2 :(得分:-1)
table
的类型为Observable
,而不是TableData类的实例。您需要使用Observable的subscribe
方法将TableData
的实例分配给绑定到模板/视图的变量。