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

Angular Material mat-table获取Node后端数据成功但表格为空如何解决

问题原因

  1. 核心原因是前后端返回格式不匹配:你的Node接口返回的是外层包裹了业务状态的对象{status: true, data: 玩家数据数组},但前端代码默认把接口响应直接当做数组处理,赋值给dataSource.data的实际是外层对象,不是可渲染的数组,因此表格没有数据。
  2. 次要需要确认的点:字段名是否匹配,模板中你读取的是element.population,需要确认后端返回的数组项中包含population字段,且你的Player接口定义了该字段。

解决方案

两种方案二选一即可:

方案1:调整后端接口返回格式(更简洁)

修改Node端的接口逻辑,直接返回数据数组,去掉外层包裹:

// Get all Players
exports.findAll = (req, res) => {
    Player.findAll().then((players) => {
    // 直接返回数组
    res.status(200).json(players);
  });
};

方案2:调整前端响应解析逻辑(无需修改后端)

第一步:修改player.service.ts中的接口返回类型定义,匹配后端实际返回结构:

getPlayers(): Observable<{status: boolean, data: Player[]}> {
  return this.http.get<{status: boolean, data: Player[]}>(this.rootURL+ '/players');
}

第二步:修改component.ts中赋值逻辑,提取响应中的data字段作为表格数据源:

getPlayers() {
  this.playerService.getPlayers().subscribe(res => {
    console.log(res.data);
    this.dataSource.data = res.data;
    this.dataSource.paginator = this.paginator;
    this.dataSource.sort = this.sort;
  });
}

补充检查项

如果修改后还是没有数据,确认以下两点:

  • 你的Player接口定义的字段和后端返回字段完全一致,尤其是population字段是否存在
  • 模板中displayedColumns的三个值id、name、pop和matColumnDef的定义完全对应,目前你的代码这部分是正确的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:45:03