2017-05-17 2 views
1

Ich habe ein BehaviorSubject von Bildern (weil ich .getValue() in einigen Fällen brauche) und ein Observable, das die als Favoriten markierten Bilder darstellt, was eine Untermenge von ist die Bilder. Mein Code funktioniert, und hier ist es:Wie man eine Observable als Subset-Sammlung einer BehaviorSubject-Collection implementiert

public pictures: BehaviorSubject<Array<Picture>>; 
public favoritesPictures: Observable<Array<Picture>>; 

constructor(private http: Http) { 
    this.pictures = new BehaviorSubject([]); 
    this.favoritesPictures = Observable.create((observer) => { 
     this.pictures.subscribe((pictures) => { 
      observer.next(pictures.filter((p) => p.isFavorite)); 
     }); 
    }); 
} 

aber ich mag diese Syntax fühlen, ist ziemlich „schwer“, gibt es eine sauberere Weg, um eine beobachtbare als Teilmenge eines BehaviorSubject zu binden?

Antwort

2

Sie können versuchen, folgen. BehaviorSubject ist beobachtbar.

public pictures: BehaviorSubject<Array<Picture>>; 
public favoritesPictures: Observable<Array<Picture>>; 

constructor(private http: Http) { 
    this.pictures = new BehaviorSubject([]); 
    this.favoritesPictures = this.pictures.map((a) => a.filter((p) => p.isFavorite)); 
} 
+0

Vielen Dank für Ihre Antwort. Es ist eine gute Idee, aber in diesem Schnipsel ist 'p' Array , also hat es keine' isFavorite' Eigenschaft – bviale

+0

Sorry, das habe ich verpasst. Die Antwort ist jetzt aktualisiert ... –

+0

Ja das ist das, danke. Weißt du, was der Unterschied ist, wenn ich '.share()' nach der Karte hinzufüge? – bviale

Verwandte Themen