根据 material table of Angular 9 中的值在一列中显示多个数据数组

Display multiple data array in one column depending on value in material table of Angular 9

我有这个数据。服务值为真时如何在table中显示? 像下面这样的东西。

Table 应该是:

ID     Services
5      service1,service3

数据:

  {   
    id: 5, 
    services:
    { 
       service1: true, 
       service2: false, 
       service3: true, 
    }
  }

html

      <ng-container matColumnDef="id"> 
        <mat-header-cell *matHeaderCellDef mat-sort-header>QTY</mat-header-cell>
        <mat-cell *matCellDef="let purchaseOrder">{{purchaseOrder.id}}</mat-cell>
      </ng-container>

     <ng-container matColumnDef="services"> 
        <mat-header-cell *matHeaderCellDef mat-sort-header>Equipment Ordered</mat-header-cell>
        <mat-cell *matCellDef="let purchaseOrder">{{purchaseOrder.services}}</mat-cell>
      </ng-container>

您可以在过滤服务的组件中使用自定义方法:

getRequiredServices(servicesObject) {
 return Object.keys(servicesObject).filter(service => servicesObject[service]).join();
}

并在您的 HTML 中:

<ng-container matColumnDef="services">
  <mat-header-cell *matHeaderCellDef mat-sort-header>Equipment Ordered</mat-header-cell>
  <mat-cell *matCellDef="let purchaseOrder">{{getRequiredServices(purchaseOrder.services)}}</mat-cell>
</ng-container>

更新

按照您在评论中提出的要求以这种方式修改方法(return 具有所有真实属性的字符串):

getRequiredServices(servicesObject) {
  return Object.entries(servicesObject).reduce(
    (requiredServices, [key, value]) => {
      if (typeof value === 'boolean' && value) {
        requiredServices.push(key);
      } else if (typeof value === 'string' && value) {
        requiredServices.push(value);
      }
      return requiredServices;
    },
    []
  ).join();
}