Как я могу получить все предметы всех пользователей - PullRequest
0 голосов
/ 18 ноября 2018

Я практикую немного Angular / Ionic, и мне немного трудно понять, как я могу получить весь offresList всех пользователей

это моя база данных выглядит так:

enter image description here

Это мой провидр offre.ts

export class OffreProvider {

public offreListRef: firebase.database.Reference;

constructor() {
  firebase.auth().onAuthStateChanged(user => {
      if (user) {
        this.offreListRef = firebase
          .database()
          .ref(`/userProfile/${user.uid}/offreList`);
      } 
  });
}

 createOffre(
  offreTitre: string,
  offreSecteur: string,
  offreVille: string,
  offreDispo: string,
  offreDescrip: string,
  offreDate : string,
 ): firebase.database.ThenableReference {
 return this.offreListRef.push({
  titre: offreTitre,
  secteur: offreSecteur,
  ville: offreVille,
  dispo: offreDispo,
  descrip: offreDescrip,
  date : offreDate
});
}

getOffreList(): firebase.database.Reference {
return this.offreListRef;
}
}

, и вот как я получаю все предложения currentUser mesOffres.ts

  export class MesOffresPage {

  public offreList: Array<any>;

  constructor(public navCtrl: NavController, public navParams: NavParams, 
 public offreProvider: OffreProvider) {
 }

  creatOffre(): void {
 this.navCtrl.push('CreateOffrePage');
 }

 ionViewDidLoad() {
 this.offreProvider.getOffreList().on("value", offreListSnapshot => {
   this.offreList = [];
   offreListSnapshot.forEach(snap => {
     this.offreList.push({
      id: snap.key,
      titre: snap.val().titre,
      secteur: snap.val().secteur,
      ville: snap.val().ville
      });
     return false;
  });
 });
 }
 }

теперь, как я могуполучить все списки всех пользователей с alloffres.ts и отобразить его в alloffres.html Я собираюсь в течение 2 дней

1 Ответ

0 голосов
/ 18 ноября 2018

Чтобы получить предложения для всех пользователей, вам нужно загрузить все пользовательские данные.Примерно так:

ionViewDidLoad() {
  let ref = firebase.database().ref("userProfile");
  ref.on("value", userListSnapshot => {
    this.offreList = [];
    userListSnapshot.forEach(userSnapshot => {
      let offerListSnapshot = userSnapshot.child("offreList");
      offerListSnapshot.forEach(offerSnapshot => {
        this.offreList.push({
          id: snap.key,
          titre: snap.val().titre,
          secteur: snap.val().secteur,
          ville: snap.val().ville
        });
      });
    })
  });
 }

Обратите внимание, что этот код также загружает данные профиля для каждого пользователя, которые он не использует.Это одна из многих причин, почему опытные разработчики Firebase рекомендуют хранить отдельные типы сущностей в отдельных списках верхнего уровня.Так что в вашем случае я бы рекомендовал иметь:

userProfiles: {
  uid1: {
    ...
  },
  uid2: {
    ...
  }
},
userOffers: {
  uid1: {
    "-LRZ...": {
      ...
    }
  },
  uid2: {
    "-LRQ...": {
      ...
    }
  }
}

С помощью приведенной выше структуры вы можете загружать только предложения для всех пользователей с кодом, очень похожим на тот, что я поделился выше.Но с обновленной структурой вы не будете загружать данные профиля пользователя без необходимости.И только в случае, если вам нужны данные профиля и предложения для пользователя, вы можете легко загрузить оба в отдельных звонках.Производительность будет очень похожей, поскольку Firebase передает запросы по одному соединению .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...