0

在我的公司,我有一个非常复杂的应用程序结构。我们正在使用 NX Workspace 开发 3 个应用程序,这些应用程序都具有共享模块。

我们的应用程序结构看起来像这样:apps -->app1 -->app2 -->app3

libs --> 具有组件和 ngxs 状态的身份验证模块 --> 具有组件和 ngxs 状态的其他共享模块

我们所有的库都被延迟加载到每个需要它的应用程序中。

所以我遇到的问题是 ngxs 存储插件。似乎必须将它导入每个应用程序模块,如果您不指定密钥,那么它将每个状态转储到本地或会话存储中(我们正在使用会话存储)。如果没有添加路由器状态,这对我来说会很好。

似乎当路由器状态处于会话存储中时,当您尝试通过在 url 栏中手动键入链接来导航到另一个页面时,它会将您重定向回路由器导航到的上一个页面。

我四处搜索,似乎每个人都建议您不要将路由器存储在会话存储中。如果有其他解决方法请告诉我!

如果没有解决路由器问题的方法,那么这就引出了我的下一个问题/问题。我希望能够将状态单独添加到存储中,但我也希望将该代码与状态所属的模块一起保留,而不必将其添加到每个应用程序的 AppModule 中。我们将拥有一个非常大的应用程序,并且必须从我们每个应用程序中的所有库中映射每个状态将令人筋疲力尽。

存储插件没有 forFeature 选项,但是否考虑过像我这样的复杂应用程序?

我可以在 github 上提出一个关于它的问题,但想在这里与社区联系,以确保那里没有我缺少的解决方案。

4

1 回答 1

0

似乎当路由器状态处于会话存储中时,当您尝试通过在 url 栏中手动键入链接来导航到另一个页面时,它会将您重定向回路由器导航到的上一个页面。

我遇到了同样的问题@ngxs/router-plugin@3.2.0

我四处搜索,似乎每个人都建议您不要将路由器存储在会话存储中。如果有其他解决方法请告诉我!

如果路由器未存储在会话对象中,我可以手动导航到不同的路由。但是,现在我必须在NgxsStoragePluginModule.forRoot({key: ['auth', 'users', '...']}).

我找到了另一个不使用路由器插件的解决方案。这需要您设置自己的路由器状态(例如angularfirebase):

@Action(Navigate)
  async changeRoute(context: StateContext<string>, action: Navigate) {
    const path = action.payload;
    await this.router.navigate([path]);
    context.setState( path );
  }

现在我可以通过在 url 栏中键入链接手动导航到任何页面,所有状态都存储在会话存储中,包括路由路径。

希望这也适用于你。

于 2018-10-18T11:45:26.817 回答