Router store¶
Для связки модуля маршрутизации с хранилищем используйте NgRx Router State, который позволяет отслеживать процесс смены URL в Angular приложении с помощью действий.
NgRx Router Store устанавливается отдельно.
1 | |
Далее необходимо импортировать нужные модули в корневой модуль вашего Angular приложения.
1 2 3 4 5 6 7 | |
Сама структура состояния router выглядит следующим образом.
1 2 3 4 5 6 7 | |
Описание объекта состояния NgRx Router Store:
state— информация в текущем маршруте, содержит два свойства:root— экземпляр корневого маршрута;url— текущий URL-адрес;
navigationId— порядковый номер смены маршрутизации в рамках текущей сессии работы Angular приложения.
В NgRx Router Store предусмотрены пять действий, каждое из которых представляет одну из стадий процесса смены маршрута:
ROUTER_REQUEST— начало перехода на другой URL;ROUTER_NAVIGATION— сам процесс перехода, вызывается до выполнения всехGuardsиResolvers;ROUTER_NAVIGATED— успешный переход на заданный URL;ROUTER_CANCEL— генерируется, если смена URL была заблокированаGuardилиResolver;ROUTER_ERROR— генерируется, если в процессе перехода возникает ошибка
Действия ROUTER_CANCEL и ROUTER_ERROR содержат информацию в маршруте с которого осуществляется переход.
Конфигурация NgRx Router Store¶
Метод StoreRouterConnectingModule.forRoot() в качестве необязательного параметра принимает объект с пользовательскими настройками NgRx Router Store.
Передаваемый объект должен реализовывать интерфейс StoreRouterConfig с тремя не обязательными свойствами:
stateKey— имя части глобального состояния, в которой будут храниться все данные маршрутизации (по умолчаниюrouter); помимо строки может принимать селектор;serializer— позволяет кастомизировать структуру данных состояния, которое передается в каждом действии;navigationActionTiming— определяет момент генерации действияROUTER_NAVIGATIONи может быть либоNavigationActionTiming.PreActivation(по умолчанию), либоNavigationActionTiming.PostActivation.
NavigationActionTiming.PreActivation означает, что ROUTER_NAVIGATION будет сгенерировано до вызова всех Guards и Resolvers, а NavigationActionTiming.PostActivation — после.
Рассмотрим пример использования serializer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
И затем в app.module.ts.
1 2 3 | |