在我的app.component [AppModule]中,在ngOnInit()中,我创建了一个名为lastRouterUrl的状态的属性订阅。它的工作方式是我有一个处理ROUTER_NAVIGATION操作的reducer,并在创建新状态时更新该字段。
AppModule中的任何导航都会导致调用reducer并更新状态中的lastRouterUrl,然后调用上述订阅。
但是,我还有一些延迟加载的功能模块,当导航到这些模块时,当用户在惰性模块内部的路由中导航时,会发生以下情况。触发ROUTER_NAVIGATION操作,reducer运行并返回一个新状态,商店被更新(我在DevTools中可以看到)但是从不调用在根模块中创建的订阅。
另外,如果我将上述订阅移到懒惰模块本身,一切正常!
似乎懒惰/急切模块边界之间的任何调度和订阅者是互斥的,即发生的调度并导致状态更改,如果该订阅者位于另一个模块中,则不会通知订阅者监听该更改。 / p>
怎样才能解决这个问题?这实际上对我来说似乎不对。如果我订阅商店中属性的更改,则无论更改源是在同一模块中还是在不同模块中,以及该不同模块是否是懒惰的,都应调用我的订阅。
答案 0 :(得分:0)
为了记录,想出来了..我的功能模块中有一个重复导入,正在创建一个新商店。在商店实例下拉列表中的开发工具中发现了这一点,并注意到有2个实例。因此原始订阅是针对第一个商店的,而ROUTER_NAVIGATION操作是在同一个reducer中,但更新了第二个商店。