gpt4 book ai didi

angular - ngRx 继承的效果类不起作用

转载 作者:行者123 更新时间:2023-12-03 23:29:53 25 4
gpt4 key购买 nike

我在一个单一存储库中有两个应用程序,一个将是另一个的免费子集,因此免费应用程序中的所有功能都包含在非免费应用程序中。

我正在尝试设置我的效果,以便有一个实现所有常见效果的核心效果类,然后在非免费项目中扩展它以添加其他效果。这是行不通的。只要这是我定义的所有效果,两个应用程序都可以使用核心效果,但是一旦我向非免费类添加更多效果,它就会停止识别核心效果。

设置如下:

  • core.effects.ts 包含 CoreEffects 类,它定义了 2 个普通效果 - LoadLayout 和 ToggleSidebar
  • not-free.effects.ts 包括 NotFreeEffects 类,它扩展了 CoreEffects 类
  • free.effects.ts 包含 FreeEffects 类,它扩展了 CoreEffects 类,并且没有定义任何额外的效果。
  • 在我的模块中,我导入 Effects 模块并指定 inherited 效果类: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)
);

当我使用此设置运行任一应用程序时,一切正常。我在 reducer 中添加了日志语句,因此我可以看到 LoadLayoutSuccess 消息何时在 reducer 中传递和处理。

一旦我向 NotFreeEffect 类添加另一个效果(即免费应用程序未使用的效果),核心效果就不再被处理 - 我在 reducer 中的日志语句不再表明 LoadLayoutSuccess 曾经被调度过。 除了在非自由类中添加了一个完全不相关的效果之外,没有任何改变。免费的应用程序继续工作,而不是免费的。如果我从非免费中删除该附加效果,它会再次开始识别核心效果。

我错过了什么?你应该能够继承这样的效果类吗?

详情:

  • Angular CLI:1.7.1

  • 节点:8.9.4

  • 操作系统:win32 x64

  • Angular :5.2.7... 动画、通用、编译器、编译器-cli、核心、表单...语言服务,平台浏览器,平台浏览器动态...路由器

  • @angular/cdk: 5.2.5

  • @angular/cli: 1.7.1

  • @angular/ Material :5.2.5

  • @angular-devkit/build-optimizer: 0.3.2

  • @angular-devkit/core: 0.3.2

  • @angular-devkit/schematics: 0.3.2

  • @ngtools/json-schema: 1.2.0

  • @ngtools/webpack: 1.10.1

  • @schematics/Angular :0.3.2

  • @schematics/package-update: 0.3.2

  • typescript :2.6.2

  • webpack: 3.11.0

  • ngrx:5.2.0

  • @nrwl/nx:1.0.3

最佳答案

Ngrx < 8:

这是各种症状的已知问题。本质上,在效果的上下文中使用扩展是错误的。我的经验是,只要您在子类中没有任何效果,基类中的效果就会起作用。
https://github.com/ngrx/platform/issues/586
https://github.com/ngrx/platform/issues/1234

更新:自从这次提交 https://github.com/ngrx/platform/commit/e7ae8a228ee4338b6beac4baf0bba745fa32c917#diff-708a6e5fc1424e81075508aee61cb59f子类化后效果不再起作用。原因是“hasOwnProperty”-使用而不是直接访问 effects-metadata-property。

不幸的是,Ngrx 团队不想改变这种行为
https://github.com/ngrx/platform/pull/890

有关解决方法,请参阅 this answer .

Ngx >= 8

这现在可以通过使用 createEffect 函数来实现(他们似乎以不同的方式实现了它)。另见 this answer

关于angular - ngRx 继承的效果类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50532216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com