【问题标题】:how i get all items of all users我如何获得所有用户的所有项目
【发布时间】:2018-11-19 00:17:47
【问题描述】:

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

这是我的数据库的样子:

这是我提供的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天

【问题讨论】:

  • 您能分享一下您正在使用的 Firebase 版本吗?还有什么错误?
  • 感谢 Rudenko 先生的回复,所以下面的代码是正确的,我没有收到任何错误,它显示当前用户的所有优惠,现在我想显示所有用户的所有优惠,但我有不知道我是怎么做到的
  • 我知道我可以为您指明方向,但由于我无法访问您的确切环境/代码,您可能必须弄清楚 egdes;)

标签: javascript firebase firebase-realtime-database ionic3


【解决方案1】:

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

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

【讨论】:

  • 嗨,Puffelen 先生,非常感谢您的回复,它非常令人满意,但是我如何才能像这种单独的实体类型一样,让我显示当前用户的报价和所有用户的报价,
猜你喜欢
  • 1970-01-01
  • 2021-05-23
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 2015-11-19
  • 1970-01-01
  • 2019-01-12
相关资源
最近更新 更多