Хранение глобальной информации в @ngrx и внедрение в службы / перехватчики - PullRequest
1 голос
/ 15 мая 2019

У меня есть приложение 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?

1 Ответ

0 голосов
/ 16 мая 2019

Прежде всего, когда вы введете Store, вы получите весь магазин. Например, если вы сделаете Store<DashboardManagerState>, вы все равно получите весь магазин. Набор текста только для того, чтобы сделать его безопасным в вашем компоненте. Другими словами, во время выполнения не имеет значения, будете ли вы делать Store<{ state: AppState }> или Store<DashboardManagerState>.

Я пытался использовать селекторы, но объект, поступающий через этот конструктор, имеет мои хранилища в качестве параметров, а не базовое хранилище

Возможно, ваш селектор написан неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...