我正在使用ngrx -数据插件(运行在ngrx之上),我试图从商店中选择一个实体(ngrx数据调用'Cache')。我发现您可以向缓存中添加一个实体,但我无法找到从存储中检索单个项(基于Id)的方法。
,我必须为此编写自己的选择器吗?,我假设这样的简单操作将由ngrx-data提供。
发布于 2019-09-18 15:05:08
我确信有一种更优雅的方法可以做到这一点,但是我能够通过使用数据服务上的集合$属性来获得一个实体。
例如,我有一个名为Core的实体和一个名为EntityService的CoreEntityService。我的实体缓存已经通过coreEntityService.getByKey(id)填充。或者我可以使用getAll()填充实体缓存。
当我想用这个id检索核心时,我使用这个构造,下面通过将单个实体记录到控制台来说明:
this.coreEntityService.collection$.subscribe(collection => console.log(collection.entities[id]))
编辑后添加:
您还可以订阅实体服务的实体地图$。我向实体服务添加了一个名为selectEntityById的方法,它工作得很好,并返回一个可观察到的方法,不像前面的代码那样返回一个实际的对象:
selectEntityById(coreId: number): Observable<Core> {
return this.entityMap$.pipe(
map(entities => entities[coreId]),
first());
}ngrx/data的文档目前不是很好,但它正在改进。我希望有人能尽快给这个问题一个更好的答案。
发布于 2020-01-31 22:46:30
我有同样的问题,得出了一个稍微不同的结果。这并不一定比另一个答案更好,但它确实以一种稍微不同的方式工作。
就像glitchbane said in his answer一样,文档是一项正在进行的工作,所以我也希望我缺少一些由ngrx-data提供的随时可用的方法,但我还没有找到一个。
我希望我的订阅提供我正在寻找的单个元素,而不是使用id来选择订阅中的元素。这导致我创建了一个选择器。
进口和选择:
import { createSelector } from '@ngrx/store';
import { EntityCollection } from '@ngrx/data';
import { MyModel } from '....my.model';
export const selectMyModels =
(entities: EntityCollection<MyModel>) => entities.entities;
export const selectMyModelById = (id: number) => createSelector(
selectMyModels,
entities => entities[id]
);示例用法:
this.myModelEntityCollectionService.collection$.pipe(
select(selectMyModelById(1))) // <-- used here
.subscribe((myModel: MyModel) => {
this.myLogger.log(JSON.stringify(myModel));
}
);发布于 2020-04-02 17:35:26
我开始使用Ngrx-data,而不是很久以前.我想你可以用其他方式创建选择器。
但是,我将解释我过去是如何处理直接来自我们的模型、缓存等的实体的.我正在做的是导入构造函数中的服务。
constructor(private myModelsService: myModelEntityService) { } 然后,例如,让所有的实体
ngOnInit(){
this.entities$ = this.myModelsService.entities$;
}最后,要解决您的问题,就是从您的商店中取出一个保存的实体,或者从实体的可观察性中获得相同的拯救;我会像下面这样捕获这个实体。
this.myEntity$ = this.myModelsService.entities$.pipe(mergeAll(), take(n), last())基本上,您是在为每个具有mergeAll (分解数组)的实体执行发射,使用take对它们进行切割,并设置所需的"n“(假设您需要第三个元素,然后是n="3"),然后使用来完成最后一个元素的释放,因此您只需要这个元素。
我希望它能帮助你,或者给你正确的方向。
https://stackoverflow.com/questions/57732027
复制相似问题