typescript - Hämtar användarprofildata från firebase och visar
Jag skapar en användarprofil i Firebase med den här koden:
username: string
msgnumber: number
level: number
constructor(private fire:AngularFireAuth,private db :AngularFireDatabase,public navCtrl: NavController, public navParams: NavParams) {
}
createProfile() {
this.fire.authState.take(1).subscribe(auth => {
this.db.object(`profile/${auth.uid}`).set({
username: this.username,
msgnumber: 0,
level: 0
}).then(() =>
this.navCtrl.setRoot(TabsPage));
})
}
Det fungerar. Nu försöker jag ta användarens data och visa den på deras profilsida.
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import {AngularFireAuth} from 'angularfire2/auth';
import {AngularFireDatabase,FirebaseListObservable} from 'angularfire2/database';
@Component({
selector: 'page-profile',
templateUrl: 'profile.html'
})
export class ProfilePage {
profileData: FirebaseListObservable<any>
constructor(private fire:AngularFireAuth,private db :AngularFireDatabase,public navCtrl: NavController) {
this.fire.authState.subscribe(auth =>{
this.profileData = this.db.list(`profile/${auth.uid}`);
console.log(this.profileData);
});
}
}
Jag försökte något liknande detta men det verkar som att det inte fungerar. Problemet är, antar jag, att jag inte riktigt förstod konceptet med objekt-/listobservables eller generellt hur man hämtar data och hur objektobservables fungerar. Kollade på internet och jag antar att människor använder dem för att hämta data?
databas: db
Svar #1
Du är på rätt väg. För att slutligen hämta datan behöver du prenumerera på den andra observerbara som är tilldelad this.profileData.
Så här:
this.fire.authState.subscribe(auth => {
// subscribe to the observable
this.db.list(`profile/${auth.uid}`).valueChanges().subscribe(profile => {
console.log(profile);
});
});
Nu, för att undvika nästling kan du göra användning av switchMap-operatorn som rxjs erbjuder dig.
Resultatet ser ut så här:
this.profileData$ = this.fire.authState.switchMap(auth => this.db.list(`profile/${auth.uid}`).valueChanges());
this.profileData$.subscribe(profile => console.log(profile))
