使用 @ngrx/数据 我想处理 getWithQuery
的结果API 调用不同于默认值。
目前如果 这返回一个实体数组,它被加载到 entityCache
直接地。
到目前为止,我使用了 overview 中显示的标准模式。 :
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 的实体创建和注册一个默认 reducer 。与
add / delete / getAll / getById / getWithQuery / update
的接口(interface)方法。我想保留这些方法但覆盖
getWithQuery
reducer 来达到我的目的。 这在 Customizing Entity Reducer Behavior 中有所提及
But quite often you'd like to extend a collection reducer with some additional reducer logic that runs before or after.
这怎么能做到呢?
如果我尝试覆盖
getWithQuery
,我仍然会收到上述错误在我的PurchaseOrderService
getWithQuery(params) {
return super.getWithQuery(params).pipe(tap(result => console.log(result)));
}
最佳答案
使用自定义 EntityDataService 设法使此工作正常进行
@Injectable()
export class PurchaseOrderDataService extends DefaultDataService<
PurchaseOrder
> {
constructor(
http: HttpClient,
httpUrlGenerator: HttpUrlGenerator,
logger: Logger,
config: DefaultDataServiceConfig
) {
super("PurchaseOrder", http, httpUrlGenerator, config);
}
getWithQuery(params: string | QueryParams): Observable<PurchaseOrder[]> {
return super.getWithQuery(params).pipe(
tap(res => console.log(res)),
map((res: any) => res.entities)
);
}
}
然后这需要注册:
@NgModule({
providers: [PurchaseOrderDataService] // <-- provide the data service
})
export class EntityStoreModule {
constructor(
entityDataService: EntityDataService,
purchaseOrderDataService: PurchaseOrderDataService
) {
entityDataService.registerService(
"PurchaseOrder",
purchaseOrderDataService
); // <-- register it
}
}
并将其与
EntityDataModule.forRoot({ entityMetadata }),
一起导入
关于angular - @ngrx/data - 如何扩展集合缩减器/替换对数据服务调用结果的处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59073752/