О FIREBASE => Angular, Как читать данные в FIREBASE, когда мы используем метод Pu sh для записи данных - PullRequest
0 голосов
/ 12 апреля 2020

У меня проблема, когда я хочу прочитать данные Firebase. Я не могу получить данные:

  1. Первый раз, когда я пишу данные в базе данных 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

  2. Но когда я хочу прочитать база данных данных "Poule1" выглядит так:

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

    Мой объект joueurClassement пуст каждый раз (я думаю).

Но если я использую set метод написания => firebase.database().ref('/joueurs').set(this.joueur); моя работа по чтению очень хорошо, почему?

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Спасибо, FRank, за быстрый ответ, лучше, но не работает.

Мой КОД:

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

Дисплей консоли "Non = undefined", так что я думаю, что JoueurClass опорожнить. Может быть, придется инициализировать новый объект joueurClass?

другой вопрос: есть несколько данных, и для каждого потомка результат перезаписывает joueurClass, я хотел бы в моем объекте joueurClass все DAta, например:

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

Я надеюсь, что будет ясно. Большое спасибо за вашу помощь

0 голосов
/ 12 апреля 2020

Когда вы используете push(), вы создаете новый уникальный узел в том месте, где вы его называете. А это значит, что когда вы читаете данные, вы должны учитывать тот факт, что может быть несколько дочерних узлов.

Вы пытаетесь сделать это в своем коде с помощью [0] в this.joueurClassement[0], но если вы посмотрите на JSON, то индекс 0 отсутствует. Вызов push() генерирует так называемые pu sh ID, которые (по очень веским причинам частично объяснены здесь ) , а не индексы массива.

Для работы с дополнительный уровень дочерних узлов с неизвестными ключами, вы можете использовать встроенный в Firebase метод forEach:

firebase.database().ref('/poule1').on('value', (data) => {
    data.forEach((child) =>
        this.joueurClassement = data.val();
        console.log(this.joueurClassement.nom);
    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...