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

Angular从db.json取数成功但Mat-Table无法显示数据问题

问题原因

你将dataSource初始化为this.UserDb的空数组,但HTTP请求完成后,this.UserDb = users是让UserDb指向了一个新的数组对象,而dataSource仍然引用最初的空数组。Angular无法检测到dataSource的引用变化,因此表格不会更新展示新数据。

修复方案

有两种可行的修复方式,推荐使用第二种(符合Angular Material表格的最佳实践):

方式一:直接更新dataSource引用

在HTTP请求的回调中,更新dataSource的引用,让它指向新的数组:

修改TS文件中的ngOnInit方法:

ngOnInit(): void {
  console.log("im working");
  this._http.get("http://localhost:3002/posts").subscribe((users:any)=>{
    this.UserDb = users;
    this.dataSource = this.UserDb; // 新增此行,更新dataSource引用
    console.log(this.UserDb);
  })
}

方式二:使用MatTableDataSource(推荐)

Angular Material提供的MatTableDataSource内置了数据变更通知机制,更适合动态数据场景:

  1. 先导入MatTableDataSource:
import { MatTableDataSource } from '@angular/material/table';
  1. 修改dataSource的定义:
dataSource = new MatTableDataSource<user>(this.UserDb);
  1. 在HTTP请求回调中更新数据源的data属性:
ngOnInit(): void {
  console.log("im working");
  this._http.get("http://localhost:3002/posts").subscribe((users:any)=>{
    this.UserDb = users;
    this.dataSource.data = this.UserDb; // 更新数据源数据
    console.log(this.UserDb);
  })
}
额外细节检查
  • HTML表头中Comapnay是拼写错误,建议改为Company,不影响数据显示但提升体验。
  • 确认user接口的字段与后端返回的数据字段完全匹配,若存在字段缺失,对应列会显示为空。

内容的提问来源于stack exchange,提问作者Quiny D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:15:34