У меня есть приложение Angular 7 с глобальным хранилищем @ngrx (AppState) и несколькими хранилищами функций (например, DashboardManagerState), которые загружаются с помощью соответствующего модуля. Глобальное хранилище содержит информацию о зарегистрированном пользователе, такую как идентификатор и токен для выполнения http-запросов к нашему бэкэнду.
Я также создал перехватчик для добавления токена в запросы, и несколько других служб используют идентификатор агента в своих запросах. Хранение этой информации в Redux устраняет необходимость постоянно передавать эту информацию или сохранять ее в виде файла cookie.
Хотя у меня есть эта работа, я почти уверен, что у меня все получилось, и я пытаюсь это исправить.
Приложение работает, внедряя состояние приложения с помощью этого конструктора в мой токен-перехватчик.
constructor(private store: Store<{ state: AppState }>) {}
Я уверен, что это не правильно. Я пытался использовать селекторы, но объект, поступающий через этот конструктор, имеет мои хранилища в качестве параметров, а не базовое хранилище. Это выглядит примерно так
{
state: AppState,
dashboardManagerState: DashboardManagerState
}
, поэтому селекторы не работают должным образом.
Мне удалось добавить глобальное состояние в мое состояние объекта, но какой класс я бы внедрил в мой токен-перехватчик? Ни один из них не подходит, потому что этот сервис должен быть глобальным для приложения.
В идеале я мог бы вводить состояние по мере необходимости, используя DI Angular, чтобы я мог использовать вышеуказанный конструктор как constructor(private store: Store<AppState>) {}
и аналогично, когда я хочу состояние объекта: constructor(private store: Store<DashboardManagerState>) {}
. Я уверен, что это не правильно, но я не знаю, как правильно справиться с подобным сценарием.
Как мне ссылаться на мое глобальное состояние в сервисе, внедренном в root?