结合2个减速器ngrx angular 2

时间:2017-04-18 19:27:39

标签: javascript angular ngrx

我的项目中有一个大问题,使用angular 2(changeDetection onPush)& ngrx,我的项目有3个哑组件和一个管理它们的智能组件,它看起来像这样:

Sorry for the UX, im not a designer

所以我有一个标签的减速器和另一个用于项目的减速器,列表具有相同类型的项目,如果项目已完成或不包含在每个列表中,它只是取决于。

直到现在听起来不错,但我的问题是标签可以过滤应用程序和搜索框效果的列表过滤器只在自我列表和地图上,在列表的ngOnChanges上执行搜索过滤器并向智能组件发出过滤后的项目,并将智能组件调度存储以更改" isFiltered"属性。

我的问题在哪里? 我无法管理这两个过滤器,因为我添加了#34; isFiltered"关于项目类型的属性,但它对过滤器的效果不同,我的意思是我有一个combineLatest,管理项目的过滤器看起来像这样:

Rx.Observable.combineLatest(
  items,
  tags,
  (items, tags) => {
    return items.map((item) => {
      item.isFiltered = item.isFiltered && tags.includes(item.tagId);
      return item;
  })
})

它不能很好地工作,它的一个问题导致它的一个例程,即引用observable改变了ngOnChange跳转并再次调用dispatch,尝试了很多东西,起初我在items reducer和handle中添加了UPDATE_TAGS动作它在那里,但我读到,这不是最好的做法,在2个减速器中听同样的动作。 之后我尝试在同一个reducer中处理它,但我不知道从标签中过滤了哪些项目以及从搜索框中过滤了哪些项目。

我想到的唯一方法就是itFilteredTags和isFilteredLists项目的另一个属性。

如果你对我有答案,请告诉我,它会帮助我。 谢谢。

0 个答案:

没有答案