Winkel 2 Weg zu bekommen, Artikel aus Beobachtbare<Xyz[]>
Angesichts der folgenden Typoskript in eine Eckige 2-service:
getLanguages () {
return this.http.get(this._languagesUrl)
.map(res => <Language[]> res.json().data)
.catch(this.handleError);
Ich habe Schwierigkeiten bei der Verwendung dieses in Umständen, in denen ich nachschlagen kann ein bestimmtes Element aus dem array. Zum Beispiel, ich kann nicht die folgenden, weil filter
erwartet eine Observable<Language>
eher als eine der Observable<Language[]>
wird zurückgegeben.
getLanguages().filter(language => language.id == 3) //Error
Ich Schätze, dass mein Problem könnte sein, dass ich Mixe synchrone und asynchrone Verhalten, so dass ich meinen use case: Benutzer können geben Sie eine Sprach-id und ich möchte die Anzeige der zugehörige name der Sprache. Ich möchte zu nutzen getLanguages()
mit der Observable
Ergebnis da es bereits an anderer Stelle in das Projekt. Ich will auch mit der Umsetzung einiger Zwischenspeichern, damit die HTTP-Anfrage nicht zu bekommen, jedes mal, wenn ich eine Suche.
Irgendwelche Gedanken?
- was genau Fehler sind Sie immer?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ein Beispiel, wie Sie arbeiten, was Sie tun möchten:
https://plnkr.co/edit/lK47pVaW8b0CEez0mum4?p=preview
Drücken Sie F12 in chrome zu sehen, die Protokolle, um Ihnen eine klare Vorstellung von dem, was vor sich geht und warum es nicht funktioniert in deinem Beispiel.
Nehmen eine Besondere atention zu:
Dies ist eine andere, vielleicht bessere, Möglichkeit, es zu tun:
finden Element in Beobachtbare<Typ>
Können Sie
mergeMap
stattmap
zu verflachen array:Nun den Rückgabewert von
getLanguages
wird einObservable<Language>
Wenn Sie Folgen Sie den
map
Methode mitsubscribe
können Sie den Zugriff auf Mitglieder derLanguage
array, wenn das array zur Verfügung:Dies ist so etwas wie eine Vermutung, da ich bisher noch nicht genutzt habe RxJS persönlich, aber ich bin interessiert. Durchsicht der Dokumente, Frage ich mich, ob Folgendes funktionieren würde:
Ich verwendet, Lodash ist
_.find()
zu finden, der passende Eintrag im array zu, aber wenn Sie es nicht haben, können Sie immer führen Sie die Suche manuell ein oder verwenden Sie.filter(langs, ...)[0]
.Wenn Sie wollen, um das Zwischenspeichern, und Sie wissen, dass der name einer Sprache für eine bestimmte id wird sich nie ändern, Sie könnte verwenden, Lodash ist
_.memoize()
- Funktion, um die Wiederverwendung der output für einen gegebenen input.Ich bin gespannt zu sehen, ob das funktioniert für Sie.
Für ein Kunden-service-app, die ich bin Unterstützung, die ich brauchte, eine Möglichkeit zum ein-oder ausblenden-Schaltflächen, je nachdem, ob oder nicht ein Benutzerkonto hatte einen bestimmten Geschäftsbereich, und ich brauchte, um auf die asynchronen Daten, die geladen werden auf der Seite, und nicht unbedingt die Daten verwenden, wie Sie ist. Also ich rufe eine Methode aus der Vorlage und Verwendung von map mit finden, dann abonnieren.