如何使用 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
您应该做的是将数组传递给 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);
我在 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
您应该做的是将数组传递给 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);