使用Angular,我正在显示来自服务器的数据列表(数组)。列表上方有一个button bar
和dropdown
,允许用户filter
列表。
我在流中创建了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 :(得分:0)
这是一系列事件,一旦您第一次过滤数据 - 它将不会再次执行:
数据&gt;滤波器1&gt;数据&#39; &GT; <滤波器2>结果
如果您的过滤器不是异步,那么它可以简化为:
this.http.get('/api')
.map(data => _.filter(data, item => <check item to satisfy filters 1 and 2>))