Плагин хранения NGXS и лениво загруженное состояние - PullRequest
0 голосов
/ 26 августа 2018

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

Структура нашего приложения выглядит примерно так: apps -> app1 -> app2 -> app3

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 18 октября 2018

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

Я сталкиваюсь с той же проблемой с @ngxs/router-plugin@3.2.0.

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

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

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

...