甚至我也面临着类似的问题。因此,对于不熟悉 NgRx 数据的人,我创建了一个EntityDataListInterface,它类似于:
{
page: number,
per_page: number,
total: number,
total_page: number,
data: EntityDataItem[]
}
对于我正在处理的每个部分,我都会创建不同的服务。让我们称之为ComponentService。在这个ComponentService中,我访问 EntityService(实现EntityCollectionServiceBase < EntityDataItem >)和实体的 DataService(实现DefaultDataService < EntityDataListInterface >)。
一旦 API 返回EntityDataListInterface数据,您就可以使用addManyToCache将它们添加到实体缓存中。
在模块内部,通过传递filterFn注册EntityDataItem。现在您可以调用setFilter来根据索引(或如下所示的任何分页逻辑)过滤实体,并且可以通过filtersEntities$访问结果。
//eds: EntityDefinitionService in the constructor
const entityMetadata: EntityMetadataMap = {
EntityDataItem: {
filterFn:(entities: EntityDataItem[], pattern:{startIndex: number, endIndex: number}) => {
return entities.filter((entity, index) => {
return ((index >= pattern.startIndex) && (index <= pattern.endIndex));
})
}
}
};
eds.registerMetadataMap(entityMetadata);
订阅您的组件中的过滤实体$,它将解决分页问题。