Angular 显示 table 中的数据而不是对象中的数据

Angular showing data in table not in object

我正在开发一个安装了 ngx-datatable 并且可以正常工作的 Angular 应用程序。 我有一个 Supplier 对象,我需要使用 ngx-datatable 显示一个 table,其中一些列显示对象的某些属性,一些列显示根据对象属性动态计算的值。

这是我的供应商class:

import { Invoice } from '../../invoice/model/invoice';
import { MasterData } from '../../master-data/model/master-data';

export class Supplier {
    "createdAt": Date;
    "createdBy": string;
    "updatedAt": Date;
    "updatedBy": string;
    "id": string;
    "masterData": MasterData;
    "invoices": Invoice[];
}

这是发票class:

export class Invoice{
    "id": string;
    "number": string;
    "year": number;
    "date": Date;
    "amount": number;
}

现在我想显示一个 table,其中包含一个供应商列表,其中包含以下列:idcreatedAtcreatedBytotalAmountOfInvoicestotalNumberOfInvoices.

我的问题来自最后两列,我不知道如何正确处理。

ngx-datatable 期望组件中有 rows[]columns[],但是当我为行传递 Supplier[] 时,我不'知道我应该为计算列使用什么。

显示该数据的最佳方式是什么?当我在服务中检索对象时,我应该计算这些值并将它们注入供应商对象,还是有更好的方法来解决我的问题?

我找到了解决办法。只需使用 ng-template 而不是将 column[] 传递给 table。这样我就可以在我的组件中调用函数了。

         <ngx-datatable [rows]="supplier" class="material">
            <ngx-datatable-column>
                <ng-template let-column="column" ngx-datatable-header-template>
                    <span (click)="sort()">Name</span>
                </ng-template>
                <ng-template let-row="row" ngx-datatable-cell-template>
                    {{row.masterData.name}}
                </ng-template>
            </ngx-datatable-column>
            <ngx-datatable-column>
                <ng-template let-column="column" ngx-datatable-header-template>
                    Invoices({{currentYear}})
                </ng-template>
                <ng-template let-row="row" ngx-datatable-cell-template>
                    {{getNumberOfInvoicesCurrentYear(row)}}
                </ng-template>
            </ngx-datatable-column>
            <ngx-datatable-column>
                <ng-template let-column="column" ngx-datatable-header-template>
                    Invoices total amount ({{currentYear}})
                </ng-template>
                <ng-template let-row="row" ngx-datatable-cell-template>
                    {{getNumberOfInvoicesCurrentYear(row)}}
                </ng-template>
            </ngx-datatable-column>
        </ngx-datatable>