我有一个observable,可以流式传输当前视图状态(ngrx),这是一个对象列表:
this.store.pipe(select('objects'))
和另一个检索当前URL参数的索引部分的observable:
this.activatedRoute.params.switchMap(params => params['index'])
如果索引有效,我怎样才能将这些组合给我一个可以在当前索引(objects[index]
)流式传输对象的observable?
答案 0 :(得分:2)
combineLatest怎么样?
this.store.pipe(select('objects')).combineLatest(
this.activatedRoute.params.map(params => params['index']).filter(index => !isNaN(index)),
(objects, index) => objects[parseInt(index)]
).filter(object => object !== undefined);
答案 1 :(得分:1)
最好使用选择器! 在这种情况下,不需要组合可观察量也很容易。
您可以通过组合现有的选择器来创建新的选择器;
使用第一个和第二个observables选择器创建一个新的选择器;然后只选择一个
下面的示例我传递数据和排序参数,并按排序顺序生成数据作为新选择器
export const getDataByOrder = createSelector(
getAllData,
getSortParameters,
(data, sortBy) => {
let sortData = (a: Data, b: Data) =>
a[sortBy.orderBy].toLowerCase() < b[sortBy.orderBy].toLowerCase() ? -1 : 1;
let sorted = data.sort(sortData);
if (sortBy.direction === 'DESC') {
sorted = sorted.reverse();
}
return sorted;
}
);