首页 > 解决方案 > 角度ngrx效果

问题描述

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

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

标签: angularjsngrxngrx-storengrx-effects

解决方案


您还必须将 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() 多次运行一个效果类(例如通过不同的延迟加载模块)不会导致效果多次运行。forRoot() 和 forFeature() 加载的效果在功能上没有区别;函数之间的重要区别在于 forRoot() 设置了效果所需的提供程序。


推荐阅读