Tim*_*ter 3 ngrx ngrx-effects angular
我在单一存储库中有两个应用程序,一个将是另一个的免费子集,因此免费应用程序中的所有功能都包含在非免费应用程序中。
我正在尝试设置我的效果,以便有一个核心效果类来实现所有常见效果,然后在非免费项目中扩展它以添加其他效果。这不起作用。只要这是我定义的所有效果,两个应用程序都可以使用核心效果,但是一旦我为非免费类添加更多效果,它就会停止识别核心效果。
这是设置:
EffectsModule.forRoot([NotFreeEffects])和EffectsModule.forRoot([FreeEffects]). 如果我理解正确,这意味着我的继承类设置正确,因为仍然可以看到核心效果(除非我在继承的类中定义了其他效果)举个例子,LoadLayout 效果如下(其他类似):
@Effect()
loadLayout$: Observable<Action> = this.actions$
.ofType(CoreLayoutActions.LOAD_LAYOUT)
.switchMap(() => this.layoutService.loadLayout())
.map(
(layoutState: ICoreLayoutState) =>
new CoreLayoutActions.LoadLayoutSuccessAction(layoutState)
);
Run Code Online (Sandbox Code Playgroud)
当我使用此设置运行任一应用程序时,一切正常。我在减速器中添加了日志语句,以便我可以看到 LoadLayoutSuccess 消息何时在减速器中传递和处理。
一旦我向 NotFreeEffect 类添加另一个效果(即免费应用程序未使用的效果),就不再处理核心效果 - 我在减速器中的日志语句不再指示 LoadLayoutSuccess 被调度。 除了向 not-free 类添加一个完全不相关的 Effect 之外,没有任何改变。免费的应用程序继续工作,而不是免费的。如果我从 not-free 中删除该附加效果,它会再次开始识别核心效果。
我错过了什么?你应该能够继承这样的效果类吗?
细节:
Angular:5.2.7 ...动画、通用、编译器、编译器cli、核心、表单...语言服务、平台浏览器、平台浏览器动态...路由器
@angular/cdk:5.2.5
谢谢,
电讯
这是各种症状的已知问题。本质上,在效果的上下文中使用扩展是有问题的。我的经验是,只要您在子类中没有任何效果,基类中的效果就会起作用。
https://github.com/ngrx/platform/issues/586
https://github.com/ngrx/platform/issues/1234
更新:自从这个提交https://github.com/ngrx/platform/commit/e7ae8a228ee4338b6beac4baf0bba745fa32c917#diff-708a6e5fc1424e81075508aee61cb59f子类化时,效果不再起作用。原因“hasOwnProperty”-使用而不是直接访问效果元数据-属性。
不幸的是,Ngrx 团队不想改变这种行为
https://github.com/ngrx/platform/pull/890
有关解决方法,请参阅此答案。
现在可以通过使用createEffect-function (他们似乎以不同的方式实现了它)。另请参阅此答案
| 归档时间: |
|
| 查看次数: |
1194 次 |
| 最近记录: |