我创建了一个简单的IdentityMapService,每当我从API获取数据时,我都会更新身份映射,并根据以下2个类将身份映射的返回值映射回API中的数据。
// identity-map.service.ts
import { Injectable } from '@angular/core';
@Injectable()
export class IdentityMapService {
_identityMap = {};
map(className, object) {
if (object) {
var mappedObject;
if (this._identityMap[className]) {
mappedObject = this._identityMap[className][object.id];
if (mappedObject) {
Object.assign(mappedObject, object);
} else {
this._identityMap[className][object.id] = object;
mappedObject = object;
}
} else {
this._identityMap[className] = {};
this._identityMap[className][object.id] = object;
mappedObject = object;
}
return mappedObject;
}
}
}
// item-api.service.ts
@Injectable()
export class ItemApiService {
constructor(private api: ApiService, private identityMap: IdentityMapService) {
}
getList(page = 1, filter?: any, include?: any) {
return this.api.get('/items', { page, filter, include })
.pipe(map(response => {
response.data = response.data.map(item => {
return this.identityMap.map('item', item);
});
return response;
}));
}
get(id, include?: any) {
return this.api.get('/items/' + id, { include })
.pipe(map(response => {
response.data = this.identityMap.map('item', response.data);
return response;
}));
}
}
有没有办法在NGRX中实现这一目标?我可能有几个不同的视图,它们以不同的方式同时显示列表项或单个项目,并且要确保如果我更新任何视图中的项目,它将在所有视图中更新其他观点。在这个阶段,我想不出另一种方法来完成我正在做的过程,即在需要时获取数据,更新该数据的所有其他实例。