Ngrx-data 选择单个实体

mau*_*844 3 ngrx angular angular-ngrx-data

我正在使用 ngrx-data 插件(在 ngrx 之上运行),并且我试图从商店中选择一个实体(ngrx 数据调用“缓存”)。我发现您可以将单个实体添加到缓存中,但我找不到从商店中检索单个项目(基于 Id)的方法。

我必须为此编写自己的选择器吗?我假设 ngrx-data 会提供这样一个简单的操作

小智 7

我确信有一种更优雅的方法可以做到这一点,但我能够通过使用数据服务上的 collection$ 属性来获取单个实体。

例如,我有一个名为 Core 的实体和一个名为 CoreEntityService 的 EntityService。我的实体缓存已通过 coreEntityService.getByKey(id) 填充。或者我可以通过 getAll() 填充实体缓存。

当我想检索具有该 id 的核心时,我使用此构造,此处通过将单个实体记录到控制台来说明:

this.coreEntityService.collection$.subscribe(collection => console.log(collection.entities[id]))

编辑添加:

您还可以订阅实体服务的 entityMap$。我向我的实体服务添加了一个名为 selectEntityById 的方法,该方法运行良好并返回一个可观察对象,这与之前的代码不同,它返回一个实际对象:

selectEntityById(coreId: number): Observable<Core> {
return this.entityMap$.pipe(
  map(entities => entities[coreId]),
  first());
}
Run Code Online (Sandbox Code Playgroud)

ngrx/data 的文档目前不是很好,但正在改进。我希望有人能尽快对这个问题发表更好的答案。