收到错误:找不到ID为“ id”的列

Sin*_*met 4 angular-material angular

我正在尝试用数据填充mat-table,但出现错误:尝试这样做时,找不到ID为“ id”的列。

这是我在组件文件中完成的方式:

export class ListAllTrucksComponent {
  displayedColumns: string[] = ['id', 'plate', 'status', 'type'];
  orders: Order[] = [];
  dataSource: MatTableDataSource<Order>;

  constructor(private orderService: OrderService) {
    orderService.getAll().subscribe((orders) => {
      for (const order of orders) {
        const newOrder = new Order(order[0], order[1], order[2], order[3]);
        this.orders.push(newOrder);
      }
      console.log(this.orders);
      this.dataSource = new MatTableDataSource<Order>(this.orders);
    });
  }

  applyFilter(filterValue: string) {
    this.dataSource.filter = filterValue.trim().toLowerCase();
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我从示例中基本上复制的html:

<main>
  <div id="content">
    <mat-form-field>
      <input matInput (keyup)="applyFilter($event.target.value)" placeholder="Filter">
    </mat-form-field>

    <table mat-table [dataSource]="dataSource" class="mat-elevation-z8">

      <!-- Position Column -->
      <ng-container matColumnDef="position">
        <th mat-header-cell *matHeaderCellDef> No. </th>
        <td mat-cell *matCellDef="let element"> {{element.id}} </td>
      </ng-container>

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

      <!-- Weight Column -->
      <ng-container matColumnDef="weight">
        <th mat-header-cell *matHeaderCellDef> Weight </th>
        <td mat-cell *matCellDef="let element"> {{element.status}} </td>
      </ng-container>

      <!-- Symbol Column -->
      <ng-container matColumnDef="symbol">
        <th mat-header-cell *matHeaderCellDef> Symbol </th>
        <td mat-cell *matCellDef="let element"> {{element.type}} </td>
      </ng-container>

      <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
      <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
    </table>
  </div>
</main>
Run Code Online (Sandbox Code Playgroud)

当我console.log orders它返回此:

在此处输入图片说明

sha*_*_93 7

您对“ matColumnDef”属性的定义错误。参见下面的示例,

 <ng-container matColumnDef="position"> //matColumnDef is position here.
        <th mat-header-cell *matHeaderCellDef> No. </th>
        <td mat-cell *matCellDef="let element"> {{element.position}} </td> //and he also used element.position here
      </ng-container>

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

      <!-- Weight Column -->
      <ng-container matColumnDef="weight">
        <th mat-header-cell *matHeaderCellDef> Weight </th>
        <td mat-cell *matCellDef="let element"> {{element.weight}} </td>
      </ng-container>
Run Code Online (Sandbox Code Playgroud)

因此,您的代码需要像这样:

<main>
  <div id="content">
    <mat-form-field>
      <input matInput (keyup)="applyFilter($event.target.value)" placeholder="Filter">
    </mat-form-field>

    <table mat-table [dataSource]="dataSource" class="mat-elevation-z8">

      <!-- Position Column -->
      <ng-container matColumnDef="id">
        <th mat-header-cell *matHeaderCellDef> No. </th>
        <td mat-cell *matCellDef="let element"> {{element.id}} </td>
      </ng-container>

      <!-- Name Column -->
      <ng-container matColumnDef="plate">
        <th mat-header-cell *matHeaderCellDef> Name </th>
        <td mat-cell *matCellDef="let element"> {{element.plate}} </td>
      </ng-container>

      <!-- Weight Column -->
      <ng-container matColumnDef="status">
        <th mat-header-cell *matHeaderCellDef> Weight </th>
        <td mat-cell *matCellDef="let element"> {{element.status}} </td>
      </ng-container>

      <!-- Symbol Column -->
      <ng-container matColumnDef="type">
        <th mat-header-cell *matHeaderCellDef> Symbol </th>
        <td mat-cell *matCellDef="let element"> {{element.type}} </td>
      </ng-container>

      <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
      <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
    </table>
  </div>
</main>
Run Code Online (Sandbox Code Playgroud)

  • 我遇到过同样的问题。感谢您分享的建议,因为它解决了这个问题。 (2认同)