You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Material表格无法显示求助:matCellDef提示'of expected'

解决Angular Material表格无内容及matCellDef错误的问题

我帮你梳理下问题的几个核心关键点,一步步来修复:

1. 缺少数据行模板(导致无内容+语法错误的核心原因)

你的HTML代码里完全没有渲染数据行的<tr mat-row>模板,这是表格空内容的主要原因,同时也会触发'of expected'的语法提示。必须在表格中添加这一行,它的作用是告诉Angular如何根据你定义的列来渲染每一行数据:

<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>

2. 补充缺失的matCellDef单元格模板

你定义了displayedColumns = ['position', 'name', 'weight', 'symbol'],但只有position列有对应的<td mat-cell>模板,其他三列(name、weight、symbol)只有表头,没有单元格内容的模板。

如果你只想显示id字段(对应position列),最简单的方式是修改displayedColumns,只保留需要的列:

displayedColumns = ['position'];

如果后续需要显示其他字段,再补充对应列的单元格模板即可,比如:

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

3. 异步数据加载的小优化

虽然你在constructor里初始化了dataSource,但更推荐把数据获取逻辑放到ngOnInit生命周期钩子中,这是Angular官方推荐的最佳实践:

import { OnInit } from '@angular/core';

export class AdminIndexCompanyComponent implements OnInit {
  companies: Company[] = [];
  displayedColumns = ['position'];
  dataSource: MatTableDataSource<Company>;

  constructor(private companyService: CompanyAPIsService) {}

  ngOnInit(): void {
    this.companyService.getAllCompanies().then((company: Company[]) => {
      this.companies = company;
      this.dataSource = new MatTableDataSource<Company>(this.companies);
      // 如果需要启用排序,记得先在组件里声明@ViewChild(MatSort) sort: MatSort;
      // this.dataSource.sort = this.sort;
    });
  }
}

修复后的完整HTML示例

<div class="content"> 
  <div class="row"> 
    <div class="col-6 col-md-4 col-xl-2"> 
      <button class="mat-raised-button" [routerLink]="['add']">Aggiungi</button> 
    </div> 
  </div> 
  <mat-card> 
    <mat-card-content> 
      <table mat-table #table matSort [dataSource]="dataSource"> 
        <!-- Position Column -->
        <ng-container matColumnDef="position">
          <th mat-header-cell *matHeaderCellDef mat-sort-header> No.</th>
          <td mat-cell *matCellDef="let element"> {{element.id}} </td>
        </ng-container>

        <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
        <!-- 新增的数据行模板 -->
        <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
      </table> 
    </mat-card-content> 
  </mat-card> 
</div>

按照上面的步骤修改后,表格应该就能正常加载并显示数据了。

内容的提问来源于stack exchange,提问作者user7272904

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:16:11