从多个索引(节点)获取firebase数据

时间:2018-02-12 20:59:13

标签: typescript firebase firebase-realtime-database ionic3 angularfire

以下是我的数据库示例: enter image description here

目标是在节点编号1中列出用户的所有待定约会。然后在节点编号2中检索此约会的一些数据,尤其是praticien Id,以最终获得有关此praticien的所有详细信息。 我可以使用以下代码将数据从数字1映射到数字2:

idPatient: string
  pendingAppointment: any
  noConnection: boolean
  constructor(public navCtrl: NavController, public navParams: NavParams, public network: NetworkProvider, public firebaseProvider: FirebaseServiceProvider) {
    this.idPatient = this.navParams.get('user')
      this.pendingAppointment = this.firebaseProvider.list('patientList/'+this.idPatient+'/appointments/pending')
      .map(appointments => {
        return appointments.map(appointment => {
        return  this.firebaseProvider.object('appointments/' + appointment.$key )
        })
      })

..并在我的html中获取数据:

<div *ngFor="let appointment of pendingAppointment | async;let i = index">
{{ (appointment | async)?.praticien }}
        </div>

但是我坚持这个愚蠢的问题。 如何映射3号节点并在html中检索3号节点的详细信息?

也许有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

我觉得这样的事情应该有用......

this.pendingAppointment = this.db.list('patientList/'+this.idPatient+'/appointments/pending').snapshotChanges().map(appointments => {
    return appointments.map(appointment => ({
      appointments: this.db.object('appointments/' + appointment.payload.key).valueChanges().map(
        app => ({
          place: this.db.object('practiciensDetails/' + app.practicien).valueChanges()
        })
      )
    }));
  });

然后为你的HTML,这样的事情:

<div *ngFor="let appointment of pendingAppointment | async;let i = index">
  {{ (appointment | async)?.praticien }}
  {{ ((appointment | async)?.place | async)?.firstname }}
</div>

希望这有帮助!经过几个小时的摆弄,我能够在我的项目中得到类似的东西。我记得我花了几天的时间来完成两个级别的第一步。在这种情况下,第三级实际上只归结为“映射”一个对象的语法,而不是一个让我永远找到的列表。