Angular ngrx效果

Angular ngrx Effect

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

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

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

Register the EffectsModule in your application root imports. This EffectsModule must be added to your root NgModule for the effects providers to be registered and start when your application is loaded.

如果您只想为功能使用 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]),
]

文档中还有一条注释:

Note: Running an effects class multiple times, either by forRoot() or forFeature(), (for example via different lazy loaded modules) will not cause Effects to run multiple times. There is no functional difference between effects loaded by forRoot() and forFeature(); the important difference between the functions is that forRoot() sets up the providers required for effects.