我的ngrx商店包含两组数据:preferenceGroups
,其中包含选定偏好值组和stocks
:
有很多preferenceGroups
,有两种格式之一,一组布尔值或一个范围:
"preferenceGroups": [
{
"name": "Sectors",
"type": "toggles",
"preferences": [
{
"label": "Sector 1",
"type": "boolean",
"value": true
},
{
"label": "Sector 2",
"type": "boolean",
"value": true
}
]
},
{
"name": "Exchange",
"type": "toggles",
"preferences": [
{
"label": "Exchange 1",
"type": "boolean",
"value": true
},
{
"label": "Exchange 2",
"type": "boolean",
"value": true
}
]
},
{
"name": "Price",
"type": "price-range",
"preferences": {
"label": "Price",
"type": "currency",
"value": {
"minimum": 0,
"maximum": 999
}
}
},
...
]
我也有一堆股票,都有相同的字段,通常看起来像这样:
"stocks": [
{
"state": {
"accepted": false,
"rejected": false
},
"change": -5.36,
"changePercent": -0.13,
"dividend": 12.05,
"equitySummaryScore": 8,
"exchange": "Exchange 1",
"price": 97.10,
"sector": "Sector 1",
...
},
...
]
我的过滤器的工作方式是针对每个preferenceGroup,我想考虑任何具有与任何布尔过滤器设置为true的值相匹配的库存,并且在范围的情况下,考虑任何在该范围内的值
我可以使用
从我的ngrx商店获取所有股票和preferenceGroups作为Observablesthis.stocks = this._store.select('stocks');
this.preferenceGroups = this._store.select('preferenceGroups');
我需要做的是将过滤后的股票存储为Observable,方法是使用this.preferenceGroups
中的数据来过滤this.stocks
。
this.filteredStocks = [something I can't figure out]
例如,我列出的单一股票是匹配的,因为它有"exchange": "Exchange 1"
,"sector": "Sector 1"
和"price": "97.10"
答案 0 :(得分:3)
如果您有两个可观察量,一个带有股票,另一个带有过滤器,则需要组合两个流。您需要的是一系列每种股票以及您的偏好,以了解您是否可以展示它们。 请检查以下代码:
data.map { x =>
useState(someSetupState, x)
}
.onComplete { () =>
someSetupState.shutdown()
}
使用combineLatest时,可以组合两个observable。传递给combineLatest方法的函数将从库存$ observable中获得最新值,并从首选项$ observable中获取最后一个值。这些可观察物来自你的商店。
在这个函数中,你可以像在命令式样式中那样实现过滤逻辑。
每次向商店添加新库存时,ngrx都会将新值推送到库存可观察量,并且将重新评估带有逻辑的函数。新的偏好也是如此。
如果您在模板中订阅了合并的$ stream,则每个库存添加或首选项添加都会生成更新的视图。