如何组合和映射可观察量

时间:2018-02-13 10:47:31

标签: angular rxjs ngrx

我有一个observable,可以流式传输当前视图状态(ngrx),这是一个对象列表:

this.store.pipe(select('objects'))

和另一个检索当前URL参数的索引部分的observable:

this.activatedRoute.params.switchMap(params => params['index'])

如果索引有效,我怎样才能将这些组合给我一个可以在当前索引(objects[index])流式传输对象的observable?

2 个答案:

答案 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;
  }
);