【问题标题】:Ngrx subscription not called across lazy boundries未跨惰性边界调用 Ngrx 订阅
【发布时间】:2018-10-06 09:37:02
【问题描述】:

在我的 app.component [AppModule] 中,在 ngOnInit() 中,我创建了一个订阅,订阅了我所在州名为 lastRouterUrl 的属性。它的工作方式是我有一个 reducer 来处理 ROUTER_NAVIGATION 操作并在创建新状态时更新此字段。

AppModule 中的任何导航都会导致调用reducer 并更新状态中的lastRouterUrl,然后调用上述订阅。

但是,我也有一些延迟加载的功能模块,当导航到这些功能模块以及用户在延迟模块内部的路由中导航时,会发生以下情况。 ROUTER_NAVIGATION 动作触发,reducer 运行并返回一个新状态,store 被更新(正如我在 DevTools 中看到的那样)但是在根模块中创建的订阅永远不会被调用。

另外,如果我将上述订阅移至惰性模块本身,一切正常!

似乎惰性/急切模块边界之间的任何调度和订阅者都是互斥的,即如果订阅者在另一个模块中,发生并导致状态更改的调度不会通知侦听该更改的订阅者。

如何解决这个问题?这实际上对我来说似乎不正确。如果我订阅了商店中某个属性的更改,则应该调用我的订阅,无论更改的源是在同一个模块中还是在不同的模块中,以及不同的模块是否是惰性的。

【问题讨论】:

    标签: ngrx ngrx-store


    【解决方案1】:

    为了记录,我想通了。我的功能模块中有一个重复导入,它正在创建一个新商店。在商店实例下拉列表的开发工具中发现了这一点,并注意到有 2 个实例。所以最初的订阅是针对第一个存储的,而 ROUTER_NAVIGATION 操作在同一个减速器中,但更新了第二个存储。

    【讨论】:

      猜你喜欢
      • 2018-02-16
      • 2021-04-16
      • 2023-03-18
      • 2020-05-22
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多