Angular Ngrx存储:在执行某些操作后,是否有任何方法可以获得状态差异

Angular Ngrx存储:在执行某些操作后,是否有任何方法可以获得状态差异,angular,ngrx-store,Angular,Ngrx Store,我将ngrx存储用于复杂的存储结构,如代码所示: model.ts export interface ITableState { tables: ITables, selectedTableId: number } export interface ITables { [id: number]: ITable } export interface ITable { menus: IMenus, selectedMenuId: string } ex

我将ngrx存储用于复杂的存储结构,如代码所示:

model.ts

export interface ITableState {
    tables: ITables,
    selectedTableId: number
}

export interface ITables {
    [id: number]: ITable
}


export interface ITable {
    menus: IMenus,
    selectedMenuId: string
}

export interface IMenus {
    dishId: number,
    dishName: string
}
减速机

    case tables.ActionTypes.ADD_MENU: {
      var menuToAdd = <IAddMenu>action.payload;
      return {
        ...state,
        tables: {
          ...state.tables,
          [menuToAdd.tableId]: {
            ...state.tables[menuToAdd.tableId],
            menus: {
              ...state.tables[menuToAdd.tableId].menus,
              [menuToAdd.menuId]: menuToAdd.menu
            }
          }
        }
      }
    }
因此,在执行操作ADD_菜单时,我会得到商店中的所有菜单。 但我的问题是

假设我添加了两个菜单,然后又添加了第三个菜单 有没有办法让我知道最后一份菜单是哪一份 补充。或者简单地说,状态发生了什么变化

我找了很多,但没有找到任何解决办法。 如果可能的话,请告诉我。
提前感谢您的帮助。

例如,您可以将
lastChange
属性或更改历史记录保存在您的存储中…
然后创建一个选择器,返回最后的更改。 像这样,您将使用强大的NgRx

export interface ITableState {
    tables: ITables,
    selectedTableId: number,
    lastChange: IAddMenu
}

case tables.ActionTypes.ADD_MENU: {
  var menuToAdd = <IAddMenu>action.payload;

  // what was the previous change ?
  const previousChange = state.lastChange;
  if (previousChange.xxxxx) {
    // do something depending on last change... 
    ...
  }

  return {
    ...state,
    tables: {
      ...
    },
    lastChange: action.payload  // store new last change
  }
}
导出接口ITableState{
表:ITables,
selectedTableId:number,
最后更改:iaddmen
}
case tables.ActionTypes.ADD_菜单:{
var menuToAdd=action.payload;
//以前的变化是什么?
const previousChange=state.lastChange;
如果(先前的变更xxxxx){
//根据最后的变化做一些事情。。。
...
}
返回{
……国家,
表:{
...
},
lastChange:action.payload//存储新的上次更改
}
}

希望这会对您有所帮助。

您不能记录您的操作吗?查看最后一个操作(所需类型)有效负载将向您显示您在该操作中添加的菜单。是的,我肯定可以记录它们。但是我需要某种订阅方式(如果可能的话)来获得更改的内容,因为我必须对更改的数据进行一些处理。您可能可以使用subject/Behavior subject,您可以使用actions(生效)中的数据填充subject/Behavior subject,并从您想要使用它的地方订阅。。但是你能告诉我怎么做吗。你能分享一些关于如何做的链接或例子吗。
export interface ITableState {
    tables: ITables,
    selectedTableId: number,
    lastChange: IAddMenu
}

case tables.ActionTypes.ADD_MENU: {
  var menuToAdd = <IAddMenu>action.payload;

  // what was the previous change ?
  const previousChange = state.lastChange;
  if (previousChange.xxxxx) {
    // do something depending on last change... 
    ...
  }

  return {
    ...state,
    tables: {
      ...
    },
    lastChange: action.payload  // store new last change
  }
}