2017-02-15 77 views
2

使用Angular,我顯示來自服務器的數據列表(數組)。在列表的上方有一個button bardropdown,允許用戶列表filterRxJS 5 filter:2 combineLatest

我創建2 Subjects像這樣流中使用combineLatest

this.http.get('/api') 
    .combineLatest(this.firstFilter$.startWith(initialValue)) 
    .map(([data, firstFilter]) => _.filter(data, item => firstFilter === item.prop)) 
    .combineLatest(this.secondFilter$.startWith(initialValue)) 
    .map(([data, secondFilter]) => _.filter(data, item => secondFilter === item.prop)) 

雖然這個工程,在調試時,我注意到調用secondFilter $的.next(時),firstFilter的地圖不叫.. 。但它仍然考慮到兩個過濾器並顯示正確的數據。

我想知道是否有更好的方法來處理2個或更多的過濾器?

回答

0

這是一連串的事件,一旦你過濾後的數據第一次 - 它不會被再次執行:

數據>過濾器1>數據」>過濾器2>導致

如果你的過濾器不是異步,那麼它可以簡化爲:

this.http.get('/api') 
.map(data => _.filter(data, item => <check item to satisfy filters 1 and 2>))