我正在使用ngrx,并编写了一个效果。 问题是我想将效果与EffectModule.forFeature一起使用,但是仅当我为Root注册时,它才对我有用。 我尝试同时注册两者,但是只有当我在app.module中注册forRoot时,效果才起作用。 我是否需要在app.module和我的组件模块中都注册它?
imports: [
CommonModule,
RouterModule,
DataTableModule,
ModalModule,
SelectListModule,
StoreModule.forFeature('estateOwners', EstateOwnerReducer),
EffectsModule.forFeature([EstateOwnersEffects]),
]
答案 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()设置了效果所需的提供程序。