使用@ngrx/data我想以getWithQuery
不同于默认的方式处理 API 调用的结果。
目前,如果这返回一个实体数组,则会entityCache
直接加载。
到目前为止,我使用了概述中显示的标准模式:
export const entityMetadata: EntityMetadataMap = {
PurchaseOrder: {}
};
@Injectable({
providedIn: "root"
})
export class PurchaseOrderService extends EntityCollectionServiceBase<
PurchaseOrder
> {
constructor(serviceElementsFactory: EntityCollectionServiceElementsFactory) {
super("PurchaseOrder", serviceElementsFactory);
}
}
相反,我想处理以下 API 响应并entities
像往常一样将其加载到 entityCache 中,getWithQuery
但也将其粘贴total
在我商店的其他地方。
{
"entities": [{...}, {...}, ..., {...}], // list of entities
"total": 100
}
如果返回此 API 响应,我自然会收到以下错误:
我的理解是,为每个提供EntityCollectionDataService接口和方法的实体创建并注册了一个默认减速器add / delete / getAll / getById / getWithQuery / update
。
我想保留这些方法,但覆盖getWithQuery
减速器以实现我的目标。
这在自定义实体减速器行为中提到
但很多时候,您希望使用一些在之前或之后运行的附加 reducer 逻辑来扩展集合 reducer。
这怎么能做到呢?
如果我尝试在我的getWithQuery
内部覆盖,我仍然会收到上述错误PurchaseOrderService
getWithQuery(params) {
return super.getWithQuery(params).pipe(tap(result => console.log(result)));
}