【问题标题】:Angular material: How to map data to headers in angular material table?角度材料:如何将数据映射到角度材料表中的标题?
【发布时间】:2019-11-01 07:05:44
【问题描述】:

如何将动态数据映射到角度材料表中的各个标题?我有按类别过滤数据的情况(在 parcelItems 下总是会有 2 个类别但未排序),如下所示。在这种情况下,WearsAccessories 是标题。 Api 响应未在后端排序。我怎么能做到这一点?

这里是代码:stackblitz

示例

|---------------------|------------------------------|
|  Heading 1 (Wears)  |   Heading 2 (Accessories)    |
|---------------------|------------------------------|
|      jeans          |         earphones            |
|---------------------|------------------------------|
|      t-shirt        |         motherboard          |
|---------------------|------------------------------|

sample.json

const ELEMENT_DATA: Array<Data> = [
{
  fname: "Mark",
  lname: "jhony",
  parcels: [
    {
      parcelId: 123,
      parcelName: "parcel1",
      parcelItems: [
        { 
          name: "jeans",
          category: "wears",
          qty: 2
        },
        { 
          name: "earphones",
          category: "accessories",
          qty: 4
        },
      ]
    },
    {
      parcelId: 144,
      parcelName: "parcel2",
      parcelItems: [
        { 
          name: "motherboard",
          category: "accessories",
          qty: 5
        },
        { 
          name: "t-shirt",
          category: "wears",
          qty: 7
        },
      ]
    }
  ]
}
];

【问题讨论】:

    标签: angular angular-material dynamic-data angular-material-table


    【解决方案1】:

    检查以下代码:

    /**
     * @title Basic use of `<mat-table>` (uses display flex)
     */
    @Component({
      selector: 'table-basic-flex-example',
      styleUrls: ['table-basic-flex-example.css'],
      templateUrl: 'table-basic-flex-example.html',
    })
    export class TableBasicFlexExample implements OnInit {
      displayedColumns: string[] = ['fname', 'lname', 'parcels'];
      dataSource = ELEMENT_DATA;
      categories: any[] = [];
      ngOnInit() {
        this.dataSource.forEach(
          (element) => {
            this.categories = this.categories.concat(
              this.getCategoriesByElement(element)
            );
          }
        );
        this.categories = this.categories.
          filter( // Get unique items only
            (v, i, a) => a.indexOf(v) === i);
        console.log(this.categories);
      }
      getCategoriesByElement(element): any[] {
          var elementCategories = [];
          element.parcels.forEach(
            (parcel) => {
              elementCategories = elementCategories.concat(this.getCategoriesByParselItems(parcel.parcelItems));
            }
          );
          return elementCategories;
      }
    
      getCategoriesByParselItems(parcelItems: any[]) {
        return parcelItems
        .map( // Get category only
          (item) => {
            console.log(item.category);
            return item.category;
            })
      }
    }
    

    我不确定您想要达到什么目标,因此我发布了一些功能,可以按元素或包裹或项目为您提供整体独特的类别。

    希望这将帮助您继续。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-30
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多