我如何获得所有用户的所有物品

时间:2018-11-18 13:17:00

标签: javascript firebase firebase-realtime-database ionic3

我正在练习一些Angular / Ionic,并且很难弄清楚如何获得所有用户的offres列表

这是我的数据库,如下所示:

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获得所有用户的所有offreslist 并显示在alloffres.html中 我要堆放2天

1 个答案:

答案 0 :(得分:0)

要在所有用户中获得优惠,您将必须加载所有用户数据。像这样:

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 pipelines the requests over a single connection起,性能将非常相似。