如何使用 angular 将对象添加到包含数组的现有动态 Akita 商店

How to add object to the existing dynamic Akita store which contains Array using angular

我在 Akita 商店中存储动态值而不创建模型。

我正在尝试从商店向现有数组添加一个对象,我是秋田新手,所以尝试深度克隆秋田商店值,然后将该对象推送到数组并将更改后的数组设置到商店再次,但它复制了 store

中的值
updatestore(data) {
  var _res = _.cloneDeep(this.GetState());
  _res[1].geography.data.push(data);
  this.gStore.destroy();
  this.gStore.set(_res);
  this.GetState();
}

我转载于stackblitz

秋田为我们提供了两种类型的商店:

  • 可以容纳任何形状数据的基本存储

  • 代表实体collection的实体商店

实体店

您选择了第二个选项(这是适合您的地理位置的正确选择 collection)并创建了基于实体的商店。现在您需要向 Akita 商店提供 a collection,但您提供的是整个 json object。 Akita 尝试将此 object 转换为实体数组,但创建了错误的数组。

set()

Replace current collection with the provided collection, and resets the active entity

取自Akita docs

您应该做的是将数组传递给 EntityStore.set 方法

this.serv.SetState(data['data'].geography.data)

然后只需调用 EntityStore.add 方法即可将一项添加到您的 collection:

this.gStore.add(data);

Forked Stackblitz Akita Entity store


基本商店

如果您不想使用方便的 EntityStore,那么您可以实现基本存储:

import { Store, StoreConfig } from '@datorama/akita';

export class GeoStore extends Store<IGeoState> {
   ...

只有这样你才能像你描述的那样使用Store.update方法更新商店

var _res = _.cloneDeep(this.GetState());
_res.data.geography.data.push(data);

this.gStore.update(_res);

Forked Stackblitz Akita basic