关于FIREBASE => Angular,当我们使用Push方式写入数据时,如何读取FIREBASE中的数据

问题描述 投票:0回答:2

当我想读取 firebase 数据时遇到问题,无法检索数据。

我第一次像这样在 firebase 中写入数据:

    saveJoueurPoule(poule: any,newJoueur: any){
      console.log("poule creation" + poule);
      firebase.database().ref('/poule1).push(newJoueur);
    }

newJoueur
是一个对象:

    export class Joueur {
        //   photo: string;
        constructor(public nom: string , 
               public prenom: string,
               public poule: number, 
               public point: number,
               public victoire: number ,               
               public defaite: number,
               public nbdejeu: number
        ){}

写入数据效果很好:

Firebase Poule

但是当我想像这样读取数据 firebase“Poule1”时:

    firebase.database().ref('/poule1').on('value', (data) => {
        this.joueurClassement = data.val() ? data.val() : [] ;
        console.log( this.joueurClassement[0].nom);=> undefined

我的对象

joueurClassement
每次都是空的(我认为)。

但是如果我使用

set
方法来写 =>
firebase.database().ref('/joueurs').set(this.joueur);
我的阅读效果很好 - 为什么?

javascript firebase firebase-realtime-database
2个回答
0
投票

当您使用

push()
时,您会在调用它的位置下创建一个新的唯一节点。这意味着当您读取数据时,您必须处理可以有多个子节点的事实。

您正在尝试通过

[0]
中的
this.joueurClassement[0]
在代码中执行此操作,但是如果您查看JSON,则没有索引
0
。调用
push()
会生成所谓的推送 ID,它们是(出于很好的原因部分解释here不是数组索引。

要处理具有未知键的额外级别的子节点,可以使用 Firebase 内置的

forEach
方法:

firebase.database().ref('/poule1').on('value', (data) => {
    data.forEach((child) =>
        this.joueurClassement = data.val();
        console.log(this.joueurClassement.nom);
    })
})

0
投票

感谢 FRank 的快速回答,它更好,但不起作用。

我的代码:

firebase.database().ref('/poule1').on('value', (data) => {
    data.forEach((child) => this.joueurClass = data.val())
    console.log("Non  = "  + this.joueurClass.nom )
    })

控制台显示“Non = undefined”,所以我认为 JoueurClass 是空的。 可能,必须初始化一个新的Object joueurClass?

另一个问题: 有几个数据,对于每个孩子,结果覆盖 joueurClass ,我希望在我的对象 joueurClass 中包含所有 DATA ,例如:

joueurClass [{vital,arnaud,0,0,0,0,0},{frank,ldjldldld,0,0,0,0,0}]

我希望能说清楚。非常感谢您的帮助

© www.soinside.com 2019 - 2024. All rights reserved.