如何为材料表[dataSource]正确格式化此数据?

时间:2018-12-24 08:53:04

标签: javascript arrays angular angular-material

我可以使用*ngFor='let earning of symbolEarnings.earnings'> {{earning.actualEPS}}从API中获取数据以进行显示,现在我正尝试使用mat-table,以便与我的其他应用程序保持一致。

现在,如果我使用symbolEarnings(它是[dataSource]中的对象Object),则会出现错误

  

提供的数据源与数组,Observable或DataSource不匹配

现在我在过去几个小时中一直在尝试转换为数组。作为参考,这是数据。

{"symbol":"AAPL","earnings":
[
{"actualEPS":2.91, "EPSReportDate":"2018-11-01"},
{"actualEPS":2.34,"EPSReportDate":"2018-07-31"}
]}

所以我用它来获取symbolEarnings

    getEarning(): void {
        const id = this.route.snapshot.paramMap.get("id");
        this.svc.getEarningById(id).subscribe(data => {
          this.symbolEarnings = data;

当我'let x of symbolEarnings.earnings' {{x.actualEPS]]

时工作正常

数据当前是一个对象Object,所以我得到了上面突出显示的错误。

我尝试将收入部分转换为数组,但无济于事。 this.test = this.symbolEarnings.earnings;this.testArray = Object.keys(this.test).map(i => this.test[i]);

有趣的是,testArray适用于[dataSource],但是我需要做*ngFor='let y of testArray' [dataSource]="testArray"来获取列,然后使用<td mat-cell>{{y.actualEPS}}</td>来产生结果,但是它会在多个表上重复。

For example, EPS: 2, 2, 2 EPS: 3, 3, 3 EPS: 4, 4, 4 rather than EPS: 2, 3, 4

所以我有点儿可以用,但是我显然需要一些帮助。如果您有任何疑问,请告诉我!谢谢

1 个答案:

答案 0 :(得分:0)

我明白了。原来是*matCellDef="let element">{{element.actualEPS}},这里只引用MatTableDataSource。所以我先用dataSource = new MatTableDataSource();然后

  getEarning(): void {
    const id = this.route.snapshot.paramMap.get("id");
    this.svc.getEarningById(id).subscribe(data => {
      this.symbolEarnings = data;
      this.symbolEarningsDetail = this.symbolEarnings.earnings;
      this.dataSource.data = this.symbolEarningsDetail;