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

Angular 12 Material Table [dataSource]报错:数据源不匹配数组/可观察对象/DataSource

错误根因

你调用的getCart接口返回的是单个购物车对象,但组件中声明的carts是数组类型Cart[],你直接把单个对象赋值给数组变量后传给mat-table的[dataSource],不符合Angular Material Table要求的「数据源必须是数组、Observable或DataSource实例」的规则,所以触发类型不匹配报错。

修复方案

方案1(适配当前单条购物车展示场景)

将接口返回的单个购物车对象包装为长度为1的数组即可,修改组件ngOnInit的赋值逻辑:

ngOnInit(): void {
  this.route.params.subscribe(params => {
    this.cartsService.getCart(params.id)
      .subscribe(cartRes => {
        // 把单条对象包装成数组
        this.carts = [cartRes];
      })
  });
}

方案2(适配多购物车展示场景)

如果后续需要展示同一用户的多条购物车记录,直接将服务调用替换为返回购物车数组的后端接口即可。

可选优化

建议给carts变量初始化空数组,避免接口返回前变量未定义引发额外报错:

// 把原来的非空断言声明改成初始化为空数组
carts: Cart[] = [];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:54:03