我正在使用秋田作为我的 Angular 应用程序的状态存储。
我成功地从后端服务器获取数据并填充我的商店(数据显示在组件中)但是当我尝试更新商店中的实体时,它会发出一个空对象。
我怀疑这对我对秋田的理解很重要,但我希望调用以下内容
- 使用给定 ID 更新实体
- 使用更新的实体触发 myQuery.select(id).subscribe()
myStore.setActive(idOfThingToUpdate)
myStore.updateActive({someProperty: newPropertyValue})
myStore.removeActive(idOfThingToUpdate)
我也在服务中尝试过这种语法:
this.myStore.update(entityId, {propertyName: newPropertyValue});
上面显示的订阅函数返回一个空对象。如果我在我的实体类中创建一个构造函数并设置几个默认值,那么在 query.select() 调用中只会返回构造函数中定义的那些属性。并且这些属性的值是默认值(在构造函数中定义)而不是存储中存在的值。
因此,以下一项或两项似乎是正确的:
- 商店中的实体未更新
- 秋田正在返回一个新构建的实体,而不是我所期望的(来自商店的更新实体)
希望一切都有意义....
一些代码:
服务:
this.contestStore.setActive(contestId);
// attempt set a single property 'winningLicence' on the active entity
this.contestStore.updateActive({
winningLicence: newWinningLicence
}
);
this.contestStore.removeActive(contestId);
我是打算将新构造的实体传递给 updateActive() 函数还是只是我想要更新的道具?
export interface ContestState {
loading: boolean;
contests: Contest[];
}
export function createInitialState(): ContestState {
return {
loading: false,
contests: []
};
}
@StoreConfig({ name: 'contestStore', resettable: true})
export class ContestStore extends EntityStore<ContestState> {
constructor() {
super(createInitialState());
}
}
查询 - 当我在组件中调用 selectAll 时,这确实会返回有意义的数据:
@Injectable()
export class ContestsQuery extends QueryEntity<ContestState> {
constructor(protected contestStore: ContestStore) {
super(contestStore);
}
}
从组件...
ngOnInit(): void {
// contest is @Input and may be a new unsaved/no id contest, hence check
if (this.contest.id) {
this.contestsQuery.selectEntity(this.contest.id).subscribe((contest: Contest) => {
// this comes back as empty object after calling my update code in service shown above
console.log(contest);
});
}
}