以对象作为数据源的 Angular Material 表

标签 angular angular-material angular7

我的组件看起来像这样:

import { Component, OnInit } from '@angular/core';
import { Member} from '../entities/Member'; 
import { SearchService } from './search.service';

@Component({   
  selector: 'app-search',   
  templateUrl: './search.component.html',   
  styleUrls: ['./search.component.scss']})

export class SearchComponent implements OnInit {

  members: Member[] = [];  
  constructor(private searchService: SearchService) { }

  ngOnInit() {
    this.searchService.getPartenaires().subscribe(
        member=> {
          this.members= member;
        }
    );   
  } 
}

我还没有想出如何使用 ngFor 在 Material 表上显示我的对象。 https://material.angular.io/components/table/overview 上的示例总是使用数组作为数据源。

在将对象传递给 HTML 之前,我应该将它们放入一个数组中吗?或者有没有办法循环遍历它们?谢谢。

最佳答案

为了使用Angular Material Table,你需要先导入MatTableModule 模块来自 import {MatTableModule} from '@angular/material/table'; 到你的 app.module.ts (如果你想使用其他功能,如 MatSort 你也必须包含它们。然后在你的 DOM 文件中你应该添加模板对于您的表格和表格列,如下所示:

<table #dataTable mat-table [dataSource]="dataSource">
<!-- COLUMN INFO -->
 <!--ID Col -->
  <ng-container matColumnDef="id">
    <th mat-header-cell *matHeaderCellDef>ID</th>
    <td mat-cell *matCellDef="let item"> {{item.id}} </td>
  </ng-container>

  <!--Name Col -->
  <ng-container matColumnDef="name">
    <th mat-header-cell *matHeaderCellDef>Name</th>
    <td mat-cell *matCellDef="let item">{{item.name}} </td>
  </ng-container>

<!-- ROW Info-->
  <tr mat-header-row *matHeaderRowDef="columnsToDisplay"></tr>
  <tr mat-row *matRowDef="let rowData; columns: columnsToDisplay;"></tr>
</table>

在你的 component.ts 文件中,你需要做三件事:

  • 定义要显示的列名称(它们应该与 DOM 文件中的 matColumnDef 匹配)
  • 将你的数据源引入mat表
  • 在数据表上调用renderRows()

请记住,这将自动遍历您的数据源数组并填充您不需要任何 *ngFor 的表格。只需将您的数据源保留为 ObjectsArray

import { MatTableDataSource, MatTable, MatSort } from '@angular/material';
import { Component, ViewChild, OnInit }
export class DocumentListComponent implements OnInit {
  @ViewChild('dataTable') dataTable: MatTable<any>;
  dataSource: MatTableDataSource<ItemModel> ;
  columnsToDisplay = ['id', 'name'];
  ngOnInit() {
      let dataSamples: ItemModel[] ;
      //init your list with ItemModel Objects (can be manual or come from server etc) And put it in data source
      this.dataSource = new MatTableDataSource<ItemModel>(dataSamples);
      if(this.dataSource){
            this.dataTable.renderRows();
      }
  }
}
export class ItemModel {
name: string;
id: number;
}

关于以对象作为数据源的 Angular Material 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55336045/

相关文章:

angular - 没有 NgModel 的提供者! (Typeahead -> NgModel) 将 ngControl 添加到 bootstrap 4 TypeHead angular 2 时出现异常

Angular 5 测试返回错误

html - 使用 Angular 或 Angular Material 的 HTML 表格单元格内的垂直线和水平双向箭头

angular7 - PrimeNG 表列排序不起作用

angular - 选择表单控件在 Angular 7 中返回 [object Object]

html - 你如何从 Angular4 中的 Bootstrap 选项卡中获取选定的选项卡?

javascript - Angular 2 - 使用 HTML Canvas 时出现 "Cannot read property ' getContext' of null"错误

css - Chart.js donut Canvas 填充

javascript - 我如何确定在 Angular Material 对话框中单击了哪个按钮

angular7 - Angular 6 如何返回父级然后在 router.navigate() 中返回子级