ngrx处理对象列表,加载其中一个

时间:2018-04-03 10:10:24

标签: angular ngrx ngrx-store

我遇到了问题,无法找到所描述的解决方案。

我想说我想要一个"插槽"在商店,这将存储文章。

现在我有一个页面,我知道我需要显示两篇特定的文章,所以对于每一个我都有智能组件,效果,减速器和动作的属性。

我正在寻找的东西就像常见的文章列表,在大多数情况下,我可以通过某些属性选择id。

这是正确的方法吗?由于reducers方法应该返回存储的对象,因此只返回ID中的一篇文章是不正确的地方。

同样的情况是加载必须首先从API下载并添加到存储列表的文章。由于显示文章的组件是虚拟组件,因此我无法在初始化之前收集所有需要下载的文章。

这个逻辑应放在哪里?

感谢您的任何建议

1 个答案:

答案 0 :(得分:0)

关于使用id选择的第一个问题: 使用选择器将逻辑放在选择器或服务中。你是对的,不要在减速机中这样做。 @ ngrx / entity可以自动为您完成此任务。

伪代码:

getArticles(): Observable<Article[]> {
  return this.store.select(this.articles);
}
getArticleById(id: number | string): Observable<Article> {
  return this.getArticles().pipe(
    take(1),
    map(articles => articles.find(a => a.id === id)),
  );
}

第二个问题,加载东西。在效果中执行此操作,然后将包含模型/响应数据的操作分派给reducer。如果你没有使用@ngrx / effects,你可以在注入了商店的服务中进行,然后将结果发送到商店。