【问题标题】:Access NgRx actions/selectors of a lazy-loaded module访问延迟加载模块的 NgRx 操作/选择器
【发布时间】:2022-01-25 02:54:03
【问题描述】:

我的问题和这个很相似:Angular 7, Ngrx, Rxjs 6 - Accessing state between lazy loaded modules

有一个角根模块(AppModule),如果在延迟加载的子模块(一个发送 CONNECTED 动作的 AuthModule)中发生动作,它希望得到通知,以便它可以更新自己的 shell ui(隐藏一些导航动作...)

AppModule reducer 如何访问 AuthModule 中声明的操作和选择器,因为这两个模块之间不应该存在静态依赖关系? (延迟加载)

由于 NgRx 鼓励使用 createFeature 在子模块的单个文件中声明化简器和选择器,因此父模块应该有一种方法可以引用这些操作。

到目前为止,我看到的唯一方法是创建第三个模块,它存储身份验证操作、reducer 和选择器,并从 AppModule 和 AuthModule 中引用它。 但这可能会出于某些技术原因创建一堆新模块。

你知道更好的设置吗?

【问题讨论】:

    标签: angular lazy-loading ngrx


    【解决方案1】:

    功能状态不是解耦的,它只是应用程序(根)状态的子属性,以 featureName 作为键。

    如果您的身份验证功能具有功能名称auth,您可以通过this.store.select(state => state.auth) 访问它。

    您应该使用 Store<any> 注入存储以避免 TypeScript 编译器的复杂性。


    如果您需要访问延迟加载模块的选择器和操作,那么我会按照您的建议进行操作:将 ngrx 相关内容提取到第三个(共享)模块中。 app 模块和 auth 模块都将依赖它。

    【讨论】:

      【解决方案2】:

      这称为“共享或根状态” - 如果两个或多个模块(无论是否延迟加载)需要共享状态,则应从模块中提取该状态并将其置于根/共享状态。

      【讨论】:

        猜你喜欢
        • 2020-08-15
        • 1970-01-01
        • 2018-04-11
        • 2019-10-05
        • 2018-05-22
        • 2017-02-22
        • 1970-01-01
        • 2020-12-21
        • 1970-01-01
        相关资源
        最近更新 更多