在我的公司中,我有一个非常复杂的应用程序结构。我们正在使用NX Workspace开发具有共享模块的3个应用程序。
我们的应用程序结构如下所示:apps-> app1-> app2-> app3
libs->具有组件和ngxs状态的身份验证模块->其他具有组件和ngxs状态的共享模块
我们所有的库都被延迟加载到需要它的每个应用程序中。
所以我遇到的问题是ngxs存储插件。似乎必须将其导入每个应用程序模块中,如果您不指定键,则它将每个状态转储到本地或会话存储中(我们正在使用会话存储)。如果不是因为要添加路由器状态,这对我来说也很好。
似乎当路由器状态为会话存储时,当您尝试通过在URL栏中手动键入链接来导航到另一个页面时,它将重定向您回到路由器导航到的上一页。
我到处搜索,似乎每个人都建议您不要将路由器存储在会话存储中。如果还有其他解决方法,请告诉我!
如果没有解决路由器问题的方法,那么这将带我进入下一个问题/问题。我希望能够将状态分别添加到存储中,但我也想将该代码保存在状态所属的模块中,而不是必须将其添加到每个应用程序的AppModule中。我们将拥有一个非常大的应用程序,并且必须在我们每个应用程序中的所有库中映射每个状态。
存储插件没有forFeature选项,但是像我这样的复杂应用程序已经考虑过此选项吗?
我可以在github上提出一个问题,但是想与这里的社区联系,以确保那里没有我遗失的解决方案。
答案 0 :(得分:0)
似乎当路由器状态为会话存储时,当您尝试通过在URL栏中手动键入链接来导航到另一个页面时,它将重定向您回到路由器导航到的上一页。
我在@ngxs/router-plugin@3.2.0
上遇到了同样的问题。
我到处搜索,似乎每个人都建议您不要将路由器存储在会话存储中。如果还有其他解决方法,请告诉我!
如果路由器未存储在会话对象中,我可以手动导航到其他路由。但是,现在我必须在NgxsStoragePluginModule.forRoot({key: ['auth', 'users', '...']})
中分别指定每个状态。
我找到了另一种不使用路由器插件的解决方案。这就需要您设置自己的路由器状态(example,通过angularfirebase):
@Action(Navigate)
async changeRoute(context: StateContext<string>, action: Navigate) {
const path = action.payload;
await this.router.navigate([path]);
context.setState( path );
}
现在,我可以通过在网址栏中键入链接来手动导航到任何页面,并且所有状态都存储在会话存储中,包括路由路径。
希望这对您也有用。