问题描述
我正在尝试使用 ngrx/data -> saveEntities 向商店添加多个实体。到目前为止,我得到了这个:
@Injectable()
export class MaintenanceEntityService extends EntityCollectionServiceBase<Maintenance> {
constructor(
private serviceElementsFactory: EntityCollectionServiceElementsFactory,private entityCachedispatcher: EntityCachedispatcher) {
super('Maintenance',serviceElementsFactory);
}
addBatch(maintenances: Maintenance[]) {
const changes: ChangeSetItem[] = [
cif.add('Maintenance',maintenances)
];
const changeSet: ChangeSet = { changes,tag: 'Creating alert batch'};
return this.entityCachedispatcher.saveEntities(changeSet,`${environment.API}maintenances`).pipe(
map(response => response)
);
}
}
我的端点接收并返回这样的对象:
interface ChangeSet<T = any> {
changes: ChangeSetItem[]
extras?: T
tag?: string
}
在后端,我将所有实体插入数据库,然后在返回相同对象之前更新 ID,但再次在 Angular 应用程序中,商店没有更新。我错过了什么吗?
https://ngrx.io/api/data/EntityCacheDispatcher#saveentities
解决方法
好的,ChangeSet
对象有一个名为 ChangeSetItem
的属性,其结构如下:
type ChangeSetItem = ChangeSetAdd | ChangeSetDelete | ChangeSetUpdate | ChangeSetUpsert;
interface ChangeSetAdd<T = any> {
op: ChangeSetOperation.Add
entityName: string
entities: T[]
}
所以我需要从后端返回相应的 entityName
以便将其添加到商店:在我的情况下:维护
不知道为什么没有在这一行中设置属性:
const changes: ChangeSetItem[] = [
cif.add('Maintenance',maintenances)
];