gpt4 book ai didi

angular - 在@ngrx 中存储全局信息并注入(inject)服务/拦截器

转载 作者:行者123 更新时间:2023-12-02 00:52:57 26 4
gpt4 key购买 nike

我有一个 Angular 7 应用程序,它有一个全局 @ngrx 存储 (AppState) 和一些功能存储(例如 DashboardManagerState),它们使用相应的模块延迟加载。全局存储包含有关已登录用户的信息,例如 id 和用于向我们的后端发出 http 请求的 token 。

我还创建了一个拦截器来将 token 添加到请求中,一些其他服务在他们的请求中使用代理 ID。将此信息存储在 Redux 中,就无需不断传递此信息或将其存储为 cookie。

虽然我已经完成了这项工作,但我很确定我已经以一种 hacky 的方式解决了它,我正在寻找解决这个问题的方法。

通过在我的 token 拦截器中使用此构造函数注入(inject)应用程序状态,我已经让我的应用程序正常工作。

constructor(private store: Store<{ state: AppState }>) {}

我敢肯定这是不正确的。我试过使用选择器,但通过该构造函数传入的对象将我的商店作为参数,而不是基本商店。看起来像这样

{
state: AppState,
dashboardManagerState: DashboardManagerState
}

因此选择器无法正常运行。

我已经能够将全局状态添加到我的功能状态中,但是我应该将什么类注入(inject)到我的 token 拦截器中?没有一个是合适的,因为此服务对于应用程序必须是全局的。

理想情况下,我可以使用 Angular 的 DI 根据需要注入(inject)状态,因此我可以将上述构造函数用作 constructor(private store: Store<AppState>) {}同样,当我想要功能状态时:constructor(private store: Store<DashboardManagerState>) {} .我很确定那是不正确的,但我不知道处理这种情况的正确方法。

如何在注入(inject)根的服务中引用我的全局状态?

最佳答案

首先,当你注入(inject) Store你会 git 整个商店。例如,如果你会做 Store<DashboardManagerState> ,您仍然会得到整个商店。打字只是为了让它在你的组件中是类型安全的。换句话说,在运行时,你是否会做 Store<{ state: AppState }> 并不重要。或 Store<DashboardManagerState> .

I've tried using selectors but the object coming in through that constructor has my stores as parameters and not the base store

您的选择器可能写错了吗?

关于angular - 在@ngrx 中存储全局信息并注入(inject)服务/拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56156956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com