Angular Firebase中ngFor返回[object object]问题排查求助
嘿,我来帮你搞定Angular里用Firebase时ngFor显示[object object]的问题!
首先得搞清楚为啥会出现这个情况——你的Firebase数据库里testX是一个键值对对象(用用户生成的字符串当key),而Angular的*ngFor只能遍历数组,直接把对象丢进去的话,Angular没法解析里面的内容,就会输出[object object]。而且你原来的getTree方法只是把Firebase返回的节点直接push到数组里,没处理testX这个嵌套对象,这就是问题根源。
第一步:修正数据转换逻辑
把每个节点里的testX对象转换成可遍历的数组,同时可以保留用户生成的key(如果需要用到的话)。修改你的getTree函数:
treeData: any[] = []; getTree() { this.db.list('/testTree/') .valueChanges() .subscribe(res => { // 遍历每个Firebase节点,转换testX为数组 this.treeData = res.map(node => { // 处理testX:如果存在就转成数组,否则空数组 const transformedTestX = node.testX ? Object.entries(node.testX).map(([userKey, userData]) => ({ userKey, // 保留用户生成的key ...userData // 展开用户数据(包含testY) })) : []; // 返回转换后的节点,替换原来的testX return { ...node, testX: transformedTestX }; }); }); }
第二步:调整模板里的ngFor写法
现在treeData里的每个节点的testX已经是数组了,模板里可以正常遍历:
<!-- 遍历每个树节点 --> <div *ngFor="let tree of treeData"> <h4>{{ tree.treeName || '未命名树' }}</h4> <!-- 遍历当前树的所有用户数据 --> <div *ngFor="let userItem of tree.testX" style="margin-left: 16px;"> <p>用户Key: {{ userItem.userKey }}</p> <p>NumX值: {{ userItem.testY.numX }}</p> </div> </div>
补充:如果不需要用户生成的key
要是你不需要用到ef43E2Vde这种用户key,直接用Object.values()就能得到纯数据数组:
const transformedTestX = node.testX ? Object.values(node.testX) : [];
对应的模板就可以直接取userItem.testY.numX,不用管userKey了。
内容的提问来源于stack exchange,提问作者user9553525
相关产品推荐
相关产品推荐

