如何组合和映射可观察对象
How to combine and map observables
我有一个流式传输当前视图状态 (ngrx) 的可观察对象,它是一个对象列表:
this.store.pipe(select('objects'))
和另一个检索当前 URL 参数的索引部分的可观察对象:
this.activatedRoute.params.switchMap(params => params['index'])
如果索引有效,我如何将它们结合起来给我一个在当前索引 (objects[index]
) 流式传输对象的可观察对象?
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);
使用selector 更好!
在那种情况下,不需要结合可观察对象,也很容易。
您可以创建一个新的 select 或合并现有的 select 或;
创建一个新的select或使用第一个和第二个可观察对象select或;那么select只有一个
下面的例子是我传递数据和排序参数并按新的排序顺序生成数据select或
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;
}
);
我有一个流式传输当前视图状态 (ngrx) 的可观察对象,它是一个对象列表:
this.store.pipe(select('objects'))
和另一个检索当前 URL 参数的索引部分的可观察对象:
this.activatedRoute.params.switchMap(params => params['index'])
如果索引有效,我如何将它们结合起来给我一个在当前索引 (objects[index]
) 流式传输对象的可观察对象?
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);
使用selector 更好! 在那种情况下,不需要结合可观察对象,也很容易。
您可以创建一个新的 select 或合并现有的 select 或;
创建一个新的select或使用第一个和第二个可观察对象select或;那么select只有一个
下面的例子是我传递数据和排序参数并按新的排序顺序生成数据select或
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;
}
);