2017-05-17 38 views
1

我有圖片的BehaviorSubject(因爲我需要.getValue()在某些情況下),並且可觀察到的代表圖片標記爲收藏,其中的一個子集圖片。我的代碼工作,在這裏它是:如何實現可觀察到的BehaviorSubject集合的子集收集

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)); 
     }); 
    }); 
} 

但是我喜歡這種感覺語法很「重」,是有綁定可觀察到的BehaviorSubject的子集的更清潔的方式?

回答

2

你可以嘗試以下。 BehaviorSubject是可觀察的。

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

謝謝您的回答。這是一個好主意,但是,在這個片段中,'p'是陣列所以沒有'isFavorite'財產 – bviale

+0

對不起,我錯過了這一點。答案已更新... –

+0

是的,謝謝。如果我在地圖後面添加'.share()',你知道區別嗎? – bviale