Update:
Die Fragen, die ich mit den leeren Wertfeldern wurde die Begegnung hatte mit nicht vorhandenen Schlüsseln in meiner Datenbank zu tun, so dass die meisten des Diskurses werden hier nicht auf Ihre Anwendung Frage. Wenn Sie nach einer Möglichkeit suchen, Abfragen in AngularFire2 zu "verbinden", ist die untenstehende Antwort eine gute Sache. Ich verwende derzeit combineLatest
anstelle von forkJoin
. Um dies zu tun, müssen Sie import 'rxjs/add/observable/combineLatest';
.‚Joining‘ Firebase Abfragen in Angularfire2
Ich habe folgende normalisierte Struktur Firebase:
members
-memberid1
-threads
-threadid1: true,
-threadid3: true
-username: "Adam"
...
threads
-threadid1
-author: memberid3
-quality: 67
-participants
-memberid2: true,
-memberid3: true
...
möchte ich username
in meiner threads
Ansicht machen, die von quality
sortiert ist.
Mein Service:
getUsername(memberKey: string) {
return this.af.database.object('/members/' + memberKey + '/username')
}
getFeaturedThreads(): FirebaseListObservable<any[]> {
return this.af.database.list('/threads', {
query: {
orderByChild: 'quality',
endAt: 10
}
});
}
Meine Komponente:
ngOnInit() {
this.threads = this.featuredThreadsService.getFeaturedThreads()
this.threads.subscribe(
allThreads =>
allThreads.forEach(thisThread => {
thisThread.username = this.featuredThreadsService.getUsername(thisThread.author)
console.log(thisThread.username)
})
)
}
Aus irgendeinem Grund diese protokolliert, was die Konsole wie unerfüllt Observablen aussieht.
Ich möchte diese Werte in einer Eigenschaft von threads
bekommen, damit ich es in meinen Augen wie diese machen:
<div *ngFor="let thread of threads | async" class="thread-tile">
...
{{threads.username}}
...
</div>
Aktualisiert: console.log
für allThreads
und thisThread
Aktualisiert: bis getUsername() gezeichnet
this.featuredThreadsService.getUsername(thisThread.author)
.subscribe(username => console.log(username))
Das Ergebnis hiervon ist, Objekte ohne Werte:
Ihre 'getUsername' Methode gibt nichts zurück. Ist das beabsichtigt? – echonax
Entschuldigung. Das ist ein Überbleibsel einer anderen Implementierung. Ich habe es geändert. Die aktuelle Methode verhält sich so, wie ich sie in meiner Frage beschrieben habe. –
Kannst du console.log für 'allThreads' und' thisThread' setzen, um sicherzustellen, dass sie definiert sind? – echonax