使用Angular Material 2创建新MatTable时的TypeError

问题描述 投票:1回答:1

我正在使用mat-table(来自MatTableModule)创建一个表,但是我收到以下错误:

ERROR TypeError: Cannot read property 'addClass' of undefined
  at MatHeaderCell.CdkHeaderCell (table.es5.js:275)
  at new MatHeaderCell (table.es5.js:132)
  at createClass (core.js:12166)
  at createDirectiveInstance (core.js:12011)
  at createViewNodes (core.js:13449)
  at createEmbeddedView (core.js:13327)
  at callWithDebugContext (core.js:14740)
  at Object.debugCreateEmbeddedView [as createEmbeddedView] (core.js:14070)
  at TemplateRef_.createEmbeddedView (core.js:11414)
  at ViewContainerRef_.createEmbeddedView (core.js:11130)

控制台中的错误显示与第一次出现的<mat-header-cell *matHeaderCellDef> ID </mat-header-cell>标记有关。


我无法理解什么是无效的,因为直到昨天晚上,相同的代码才像魅力一样。

component.html文件中的表

<mat-table #table [dataSource]="dataSource" style="text-align:center">
    <!-- Id Column -->
    <ng-container matColumnDef="id">
        <mat-header-cell *matHeaderCellDef> ID </mat-header-cell>
        <mat-cell *matCellDef="let element"> {{element.id}} </mat-cell>
    </ng-container>
    <!-- Creation date Column -->
    <ng-container matColumnDef="created">
        <mat-header-cell *matHeaderCellDef> Created </mat-header-cell>
        <mat-cell *matCellDef="let element"> {{element.created}} </mat-cell>
    </ng-container>
    <!-- Device ID Column -->
    <ng-container matColumnDef="deviceId">
        <mat-header-cell *matHeaderCellDef> Device ID </mat-header-cell>
        <mat-cell *matCellDef="let element"> {{element.deviceId}} </mat-cell>
    </ng-container>
    <!-- Failures Column -->
    <ng-container matColumnDef="failures">
        <mat-header-cell *matHeaderCellDef> No. Failures </mat-header-cell>
        <mat-cell *matCellDef="let element"> {{element.failures}} </mat-cell>
    </ng-container>

    <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
    <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>

在我的组件TypeScript文件中,我将数据定义为:

export class MyComponent implements OnInit {
  displayedColumns = ['id', 'created', 'deviceId', 'failures'];
  dataSource:MatTableDataSource<Element>;

  constructor() { }

  ngOnInit() {
    this.dataSource = new MatTableDataSource<Element>(ELEMENTS);
  }
}

export interface Element {
  id: string;
  created: string;
  deviceId: string;
  failures: number;
}
const ELEMENTS: Element[] = [
  {id: 'Hydrogen', created: "123", deviceId: "ABC123", failures: 0},
  {id: 'Helium', created: "123", deviceId: "123ABC", failures: 3},
  {id: 'Lithium', created: "123", deviceId: "ABCEF5", failures: 0},
  {id: 'Beryllium', created: "123", deviceId: "ABC123", failures: 2},
  {id: 'Boron', created: "123", deviceId: "67ABC3", failures: 0},
];

因此,显然,TS中的数据和HTML中的表格单元格是匹配的,是什么导致出现此错误?


更新

来自package.json的二手图书馆版本:

  • @angular/cdk^5.0.0-rc.1;
  • @angular/material^5.0.0-rc.2;
angular typescript material-design angular2-directives angular-material2
1个回答
2
投票

在package.json中,您可以查看您拥有的Angular材料的版本。你有什么版本,确保你的@ angular / cdk是相同的版本。

那可能是你的问题。我相信问题是你可能有更高版本的角度材料可能"@angular/material": "5.0.0-rc.3"和在那个版本传递给rendererCdkHeaderCell参数不再被传递,因此你必须更新"@angular/cdk": "5.0.0-rc.3"

© www.soinside.com 2019 - 2024. All rights reserved.