角ngrx效应

时间:2019-01-03 11:57:43

标签: angularjs ngrx ngrx-store ngrx-effects

我正在使用ngrx,并编写了一个效果。 问题是我想将效果与EffectModule.forFeature一起使用,但是仅当我为Root注册时,它才对我有用。 我尝试同时注册两者,但是只有当我在app.module中注册forRoot时,效果才起作用。 我是否需要在app.module和我的组件模块中都注册它?

imports: [
  CommonModule,
  RouterModule,
  DataTableModule,
  ModalModule,
  SelectListModule,
  StoreModule.forFeature('estateOwners', EstateOwnerReducer),
  EffectsModule.forFeature([EstateOwnersEffects]),
]

1 个答案:

答案 0 :(得分:1)

您还必须将EffectsModule添加到应用程序模块。根据步骤2中https://ngrx.io/guide/effects上的文档,提到:

  

在应用程序根导入中注册EffectsModule。必须将这个EffectsModule 添加到您的根NgModule中,以注册效果提供程序并在加载应用程序时启动。

如果只希望对功能使用effectsModule,而对root用户不可用,则可以执行以下操作:

app.module.ts

import { EffectsModule } from '@ngrx/effects';

@NgModule({
  imports: [EffectsModule.forRoot([])],
})
export class AppModule {}

,并且在您的模块中,您可以具有相同的代码:

imports: [
  CommonModule,
  RouterModule,
  DataTableModule,
  ModalModule,
  SelectListModule,
  StoreModule.forFeature('estateOwners', EstateOwnerReducer),
  EffectsModule.forFeature([EstateOwnersEffects]),
]

文档中还有一个注释:

  

注意:通过forRoot()或forFeature()多次运行效果类(例如,通过不同的延迟加载模块)不会导致Effect多次运行。 forRoot()和forFeature()加载的效果之间没有功能上的区别;函数之间的重要区别是forRoot()设置了效果所需的提供程序。