Angular Ngrx存储:在执行某些操作后,是否有任何方法可以获得状态差异
我将ngrx存储用于复杂的存储结构,如代码所示: model.tsAngular 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
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
}
}