Подписка ngrx не вызывается из-за ленивых границ

В моем app.component [AppModule], в ngOnInit () я создаю подписку на свойство lastRouterUrl в моем состоянии. Это работает так: у меня есть редуктор, который обрабатывает действие ROUTER_NAVIGATION и обновляет это поле при создании нового состояния.

Любая навигация в AppModule приводит к тому, что вызывается редуктор, а lastRouterUrl находится в обновленном состоянии, после чего вызывается указанная выше подписка.

Однако у меня также есть несколько лениво загружаемых функциональных модулей, когда к ним осуществляется переход и когда пользователь перемещается по внутренним маршрутам для ленивого модуля, происходит следующее. Действие ROUTER_NAVIGATION запускается, редуктор запускается и возвращает новое состояние, хранилище обновляется (как я вижу в DevTools), однако подписка, созданная в корневом модуле, никогда не вызывается.

Кроме того, если я перенесу указанную выше подписку в сам ленивый модуль, все будет работать нормально!

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

Как можно это исправить? На самом деле мне это не кажется правильным. Если я подписываюсь на изменение свойства в магазине, моя подписка должна вызываться независимо от того, был ли источник изменения в том же модуле или в другом модуле и был ли этот другой модуль ленивым или нет.


person SBKDeveloper    schedule 25.04.2018    source источник


Ответы (1)


Для записи, выяснил это .. У меня был дублированный импорт в моем функциональном модуле, который создавал новое хранилище. Поймал это в инструментах разработчика в раскрывающемся списке экземпляров магазина и заметил, что было 2 экземпляра. Таким образом, исходная подписка относилась к 1-му хранилищу, а действие ROUTER_NAVIGATION было в том же редукторе, но обновляло 2-е хранилище.

person SBKDeveloper    schedule 25.04.2018