Javascript 如何从子模块访问angular redux存储?

Javascript 如何从子模块访问angular redux存储?,javascript,angular,angular-module,angular-redux,Javascript,Angular,Angular Module,Angular Redux,在我的angular应用程序中,我使用angular redux进行应用程序状态管理。在我的主模块中,我定义了redux存储。像这样: export class MainModule { constructor(private ngRedux: NgRedux<MainAppState>, private devTools: DevToolsExtension) { let enhancers = []; if (environmen

在我的angular应用程序中,我使用angular redux进行应用程序状态管理。在我的主模块中,我定义了redux存储。像这样:

export class MainModule {
  constructor(private ngRedux: NgRedux<MainAppState>,
              private devTools: DevToolsExtension) {
    let enhancers = [];

    if (environment.production === false && devTools.isEnabled()) {
      enhancers = [...enhancers, devTools.enhancer()];
    }

    this.ngRedux.configureStore(
      reducer,
      {} as MainAppState,
      [],
      enhancers);
  }
}
我的ChildComponent类中有以下代码:

export class ChildComponent implements OnInit {

  @select(getLanguage) savedUserLanguage$: Observable<LanguageState>;

  // more code

}
导出类ChildComponent实现OnInit{
@选择(getLanguage)savedUserLanguage$:可观察;
//更多代码
}
如何从子模块访问应用程序状态存储?我应该在子模块中导入什么?只为redux商店处理创建自己的模块是否更好?也许我忘了什么


我使用Angular v4和@Angular redux/store v6。

我建议创建一个单独的模块,只包含您的商店,例如
StoreModule
。然后,您可以将
StoreModule
导入到所有子模块中,并从那里访问存储。 这是他们在官方示例应用程序中的做法:

存储模块:

子模块:


子模块中的组件:

我正在考虑将一些使用原型继承的丑陋的老JavaScript代码重构到Angular 7+项目中。我问自己的问题也差不多。受我的UdeMyAngular课程的启发,我尝试了一个ngrx存储和延迟加载模块的实验

(请记住,ngrx类似于@angular redux,但不同于@angular redux。有关详细信息,请参阅。)

我使用StoreModule.forRoot在主模块中创建存储,并在每个延迟加载的模块中,使用StoreModule.forFeature创建对存储的引用

(有关详细信息,请参阅。)

当我在带有延迟加载组件的存储上调度操作时,这些操作(以及相应的缩减器)似乎会更改主应用程序组件订阅的值

此外,当我在应用程序主组件的应用商店上分派操作时,这些操作(以及相应的缩减器)似乎会更改延迟加载组件订阅的值


而且,很难解释我在一个简单的200-500字符块中做了什么,所以我不得不使用github项目

我试着在这里重现您的问题:我设置了一个子模块访问
AppModule
中提供的redux存储。我建造的场景很好用。您能提供进一步的信息来限制问题吗?@GregorWoiWoode我的子模块将通过延迟加载进行加载。这会有问题吗?不,没问题。我使用延迟加载为您更新了演示:因为
NgRedux
作为服务提供在
AppModule
中,每个
都可以请求实例。这种方法似乎不适用于延迟加载的模块。将
StoreModule
多次导入多个门店。我在这里构建了一个示例:有一个挂起的PR试图支持延迟加载的还原程序:
export class ChildComponent implements OnInit {

  @select(getLanguage) savedUserLanguage$: Observable<LanguageState>;

  // more code

}