Подписка Ngrx не вызывается через ленивые границы - PullRequest
0 голосов
/ 25 апреля 2018

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

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

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

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

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

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

1 Ответ

0 голосов
/ 26 апреля 2018

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

...