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

Angular 5使用*ngFor渲染Firebase数据时出现Cannot find a differ错误

解决Angular 5中*ngFor的「Cannot find a differ supporting object」错误

这个报错我太熟了,主要是两个核心问题导致的,咱们一步步排查解决:

1. 核心原因:attendee不是可迭代的数组

*ngFor只能遍历数组或者实现了Iterable接口的集合,而你从Firebase获取的数据大概率是键值对形式的对象(比如{ "user1": {first_name: "xxx"}, "user2": {...} }),或者你不小心把单个对象赋值给了attendee,这就会触发这个错误。

修复方法:把Firebase返回的对象转为数组

在你的组件代码里,获取数据后需要把Firebase返回的对象转换成数组,比如用Object.values()来提取所有值:

// 假设你是这样从Firebase获取数据的
firebase.database().ref('attendees').on('value', (snapshot) => {
  const rawData = snapshot.val();
  // 把对象转为数组,如果没有数据就赋值为空数组
  this.attendee = rawData ? Object.values(rawData) : [];
});

另外,建议在组件里把attendee初始化为空数组,避免初始值为undefined/null导致的问题:

// 组件类里的定义
attendee: any[] = [];

2. 模板变量引用错误

你的HTML模板里循环变量是row,但你一直在用attendee来访问属性(比如{{ attendee.first_name }}),这完全不对!应该用循环出来的row变量来访问当前项的属性:

修正后的HTML代码

<!-- 注意把所有attendee.xxx改成row.xxx -->
<tr *ngFor="let row of attendee">
  <td class="left">{{ row.first_name }} {{ row.last_name }}</td>
  <td class="number1">250</td>
  <td class="table1">{{ row.table }}</td>
  <td class="right-bill">Bill</td>
</tr>

做完这两步,你的表格应该就能正常渲染了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:53:41