小编Dan*_*nuk的帖子

如何使用 @ngrx/store 通过 ID 存储同一状态的多个版本?

我正在 Nx 工作区中使用 Angular 5 和 @ngrx/store 开发企业应用程序。

我们的应用程序的要求之一是支持打开多个选项卡——这意味着从我们的侧边菜单中,用户可以选择多个功能或相同的功能,并在我们的应用程序中的单独选项卡中打开它们。我们需要能够分离这些选项卡的状态,因为用户可以在应该完全独立的多个选项卡中打开相同类型的搜索。例如,他们可以打开“帐户搜索”选项卡并按帐户 ID 123456 进行搜索,然后在另一个“帐户搜索”选项卡中搜索 234567。显然我们不希望一个选项卡中的状态与另一个选项卡冲突。

我不确定最好的方法是什么。我们的帐户搜索子功能的示例状态类似于

libs/accounts/src/search/+state/search.reducer.ts

export interface AccountSearchState {
  accounts: { [id: string]: Account };
  metadata: Metadata;
  ids: string[];
  loading: boolean;
  query: AccountQuery;
  ...
}
Run Code Online (Sandbox Code Playgroud)

它上面有一个顶级功能状态,例如:

libs/accounts/src/+state/index.ts

export interface AccountState {
  search: fromSearch.AccountSearchState
  ...
}
Run Code Online (Sandbox Code Playgroud)

我能想到的一种解决方案是将上述子功能状态存储在选项卡 ID 下。

libs/accounts/src/search/+state/search.reducer.ts

export interface AccountSearchState {
  states: { [id: string]: SubState }
}
Run Code Online (Sandbox Code Playgroud)

libs/accounts/src/+state/index.ts

export interface AccountState {
  search: fromSearch.AccountSearchState
  tab: fromTabs.TabState
  ...
}
Run Code Online (Sandbox Code Playgroud)

.. 这将需要一个单独的 TabState 可以在我们所有的功能模块中使用,并且至少包含以下内容:

libs/tabs/src/+state/index.ts

export interface TabState { …
Run Code Online (Sandbox Code Playgroud)

tabs angular ngrx-store ngrx-store-4.0

5
推荐指数
1
解决办法
1516
查看次数

标签 统计

angular ×1

ngrx-store ×1

ngrx-store-4.0 ×1

tabs ×1