首页 > 解决方案 > NGXS | 路由返回旧数据后选择

问题描述

我正面临 NGXS 的问题。我有一组对象,我通过调度一个动作来编辑其中一个对象。现在,当我单击重置按钮时,我想路由到父组件并将状态重置为原始状态,因此我保留了原始对象的副本。但是,问题是当我在父组件中执行选择操作时,它仍然返回旧对象。

@Select(ItemState.getItems) ItemNGXS: Observable<ItemStateModel>;

我可能做错了什么?

重置按钮代码:

 resetArray() {
    this._store.dispatch(new EditItem(this.originalItem))
      .subscribe(res => {
        this._route.navigate(['questionnaire']);
    });
  }

item.state.ts editItem 方法:

@Action(EditItem)
    edit({ getState, setState }: StateContext<ItemStateModel>, { payload }: EditItem) {
        const state = getState();
        const ItemList = [...state.items];
          const index = itemList.findIndex(item => item.Id === payload.Id);
          itemList[index] = JSON.parse(JSON.stringify(payload));
          setState({
            ...state,
            items: itemList
          });
   }

我注意到 getItems 在编辑之前将状态恢复到旧状态(即)。我不确定为什么选择器将其恢复为旧状态。

标签: angularroutingngxs

解决方案


我解决了。这是我的一个愚蠢的错误。

 resetArray() {
    this._store.dispatch(new EditItem(this.originalItem))
      .subscribe(res => {
        this._route.navigate(['questionnaire']);
    });
  }

在路由到一个组件之后,我正在调度一个将状态设置为旧数据的操作。我将代码移动到正确的位置,它得到了修复。


推荐阅读