Angular2异步嵌套数据

时间:2017-01-09 08:58:02

标签: angular pipe

我有一个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 ">不起作用。

3 个答案:

答案 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的实例分配给绑定到模板/视图的变量。