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

Angular 5中为DataTable配置DataSource报错,求解决方法

解决「Provided data source did not match an array, Observable, or DataSource」错误

我一眼就看出问题所在啦——你的API返回的是单个文档对象,但MatTableDataSource需要的是数组类型的数据(或者Observable、合法的DataSource实例),直接把单个对象赋值给它自然会报错。

先确认你的服务器返回结构:

{receivedDate: "2018-05-22T00:00:00", id: "27280371", companyName: "Dark&Stormy", documentType: 11, receipts: Array(1), …}

这是一个单独的对象,不是数组,而Angular Material表格组件需要数组来渲染每一行数据,这就是报错的核心原因。

具体修复步骤

你只需要把这个单个对象包装成数组,再传给MatTableDataSource即可,修改ngOnInit里的订阅代码:

ngOnInit() {
  this.activatedRoute.params.subscribe(params => {
    if (params['id']) {
      this.id = params['id'];
      console.log('paramsId: ', this.id);
      this.inputService.getDocumentId(this.id)
        .subscribe(res => {
          // 方案1:把单个对象包装成数组,赋值给已初始化的dataSource的data属性
          this.dataSource.data = [res];
          // 方案2:也可以重新初始化MatTableDataSource
          // this.dataSource = new MatTableDataSource([res]);
          console.log('sub-details.res: ', res);
        });
    }
  });
}

额外注意事项

  • 检查你的displayedColumnsReceipt字段是否和返回对象的属性匹配:比如你列配置里写的fromDate,但返回的字段是receivedDate,这会导致表格无法正确渲染对应列的数据,需要调整列名或者做字段映射。
  • 如果未来你的API可能返回多个文档对象,建议直接让后端返回数组格式,这样前端就不需要额外做包装处理了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:34:42