Плагин хранилища NGXS и ленивое состояние загрузки

В моей компании у меня довольно сложная структура приложений. Мы используем NX Workspace для разработки 3 приложений с общими модулями для всех из них.

Структура нашего приложения выглядит примерно так: приложения -> приложение1 -> приложение2 -> приложение3.

libs -> модуль auth с компонентами и состоянием ngxs -> другие общие модули с компонентами и состоянием ngxs

Все наши библиотеки лениво загружаются в каждое приложение, которое в этом нуждается.

Итак, проблема, с которой я столкнулся, связана с плагином хранилища ngxs. Кажется, что его нужно импортировать в каждый модуль приложения, и если вы не укажете ключи, он сбрасывает каждое состояние в локальное или сеансовое хранилище (мы используем сеансовое хранилище). Меня бы это устроило, если бы не добавлялось еще и состояние маршрутизатора.

Кажется, что когда состояние маршрутизатора находится в хранилище сеанса, когда вы пытаетесь перейти на другую страницу, вручную вводя ссылку в строке URL-адреса, он перенаправляет вас обратно на предыдущую страницу, на которую был перемещен маршрутизатор.

Я искал вокруг, и все, кажется, просто предлагают вам не хранить маршрутизатор в хранилище сеансов. Если есть другой способ решения этой проблемы, ПОЖАЛУЙСТА, дайте мне знать!

Если решения проблемы с маршрутизатором не существует, тогда я перехожу к следующей проблеме / вопросу. Я хочу иметь возможность добавлять состояния в хранилище по отдельности, но я также хочу сохранить этот код с модулем, которому принадлежит состояние, вместо того, чтобы добавлять его в AppModule каждого приложения. У нас будет очень большое приложение, и необходимость отображать каждое состояние из всех наших библиотек в каждом из наших приложений будет утомительной.

Для плагина хранилища нет опции forFeature, но учитывалась ли она для таких сложных приложений, как мое?

Я могу поднять проблему в github по этому поводу, но хотел обратиться к сообществу, чтобы убедиться, что еще нет решения, которое мне не хватает.


person Shawn Cain    schedule 26.08.2018    source источник


Ответы (1)


Кажется, что когда состояние маршрутизатора находится в хранилище сеанса, когда вы пытаетесь перейти на другую страницу, вручную вводя ссылку в строке URL-адреса, он перенаправляет вас обратно на предыдущую страницу, на которую был перемещен маршрутизатор.

У меня такая же проблема с @ngxs/[email protected].

Я искал вокруг, и все, кажется, просто предлагают вам не хранить маршрутизатор в хранилище сеансов. Если есть другой способ решения этой проблемы, ПОЖАЛУЙСТА, дайте мне знать!

Я могу вручную переходить по разным маршрутам, если маршрутизатор не хранится в объекте сеанса. Однако теперь я должен указывать каждое состояние отдельно в 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, и все состояния сохраняются в хранилище сеанса, включая путь маршрута.

Надеюсь, это сработает и для вас.

person Marc Julian    schedule 18.10.2018