使用 Angular Material 2 创建新的 MatTable 时出现 TypeError
TypeError when creating a new MatTable with Angular Material 2
我正在使用 mat-table
(来自 MatTableModule
)创建 table,但出现以下错误:
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文件中的table
<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 中的 table 单元格匹配,是什么导致出现此错误?
更新
使用的库版本来自 package.json
:
@angular/cdk
: ^5.0.0-rc.1
;
@angular/material
: ^5.0.0-rc.2
;
在您的 package.json 中,您可以查看您拥有的 Angular material 的版本。
不管你有什么版本,确保你的 @angular/cdk 是相同的版本。
这可能是你的问题。我相信问题是你可能有更高版本的 angular material 可能 "@angular/material": "5.0.0-rc.3"
并且在那个版本中传递给 CdkHeaderCell
的 renderer
参数不再被传递并且因此您还必须更新 "@angular/cdk": "5.0.0-rc.3"
我正在使用 mat-table
(来自 MatTableModule
)创建 table,但出现以下错误:
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文件中的table
<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 中的 table 单元格匹配,是什么导致出现此错误?
更新
使用的库版本来自 package.json
:
@angular/cdk
:^5.0.0-rc.1
;@angular/material
:^5.0.0-rc.2
;
在您的 package.json 中,您可以查看您拥有的 Angular material 的版本。 不管你有什么版本,确保你的 @angular/cdk 是相同的版本。
这可能是你的问题。我相信问题是你可能有更高版本的 angular material 可能 "@angular/material": "5.0.0-rc.3"
并且在那个版本中传递给 CdkHeaderCell
的 renderer
参数不再被传递并且因此您还必须更新 "@angular/cdk": "5.0.0-rc.3"