В моем app.component [AppModule], в ngOnInit () я создаю подписку на свойство lastRouterUrl в моем состоянии. Это работает так: у меня есть редуктор, который обрабатывает действие ROUTER_NAVIGATION и обновляет это поле при создании нового состояния.
Любая навигация в AppModule приводит к тому, что вызывается редуктор, а lastRouterUrl находится в обновленном состоянии, после чего вызывается указанная выше подписка.
Однако у меня также есть несколько лениво загружаемых функциональных модулей, когда к ним осуществляется переход и когда пользователь перемещается по внутренним маршрутам для ленивого модуля, происходит следующее. Действие ROUTER_NAVIGATION запускается, редуктор запускается и возвращает новое состояние, хранилище обновляется (как я вижу в DevTools), однако подписка, созданная в корневом модуле, никогда не вызывается.
Кроме того, если я перенесу указанную выше подписку в сам ленивый модуль, все будет работать нормально!
Кажется, что любые отправления и подписчики между границами ленивого / нетерпеливого модуля являются взаимоисключающими, т.е. отправка, которая происходит и приводит к изменению состояния, не уведомляет подписчика, который прослушивает это изменение, если этот подписчик находится в другом модуле.
Как можно это исправить? На самом деле мне это не кажется правильным. Если я подписываюсь на изменение свойства в магазине, моя подписка должна вызываться независимо от того, был ли источник изменения в том же модуле или в другом модуле и был ли этот другой модуль ленивым или нет.