angularjs - 角度ngrx效果
问题描述
我正在使用ngrx,我写了一个效果。问题是我想将效果与 EffectModule.forFeature 一起使用,但它仅在我为根注册时才对我有效。我尝试注册两者,但只有当我在 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的文档,提到:
在您的应用程序根导入中注册 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() 设置了效果所需的提供程序。
推荐阅读
- google-analytics - 在 Google Analytics 中为单页应用程序设置目标
- pandas - 如何在特征工具中使用带有训练窗口的有趣值?
- angular - 在计时器内重置订阅
- java - 如果路径设置为 / 则找不到 cookie
- java - Spring Boot 配置验证试运行
- express - 多个网站服务器端
- c# - 使用 TypeDescriptor 和 PropertyDescriptor 将 IReadOnlyList<(string, int)> 类型的属性计数相加时出现问题
- serialization - 不支持没有无参数构造函数的引用类型的反序列化
- amazon-web-services - 试图找到我在 AWS 证书上创建的 ssl 证书
- api - 如何使用 Carina 测试框架在代码中设置数组属性值以进行 API 测试?