当我想读取 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“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);
我的阅读效果很好 - 为什么?
当您使用
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);
})
})
感谢 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}]
我希望能说清楚。非常感谢您的帮助