我试图在我的NgRx Angular 6应用程序中重用常见的effects。当前,我已经提取了一个 effect 构建器服务,该服务可帮助创建 effect 实现。我想进一步减少重复的代码。是否可以在没有声明性@Effect()
装饰器或其他方式的情况下动态构建和注册效果?
这是我拥有的两个 effect 类的示例,我的应用程序中的每个模块一个。除了传递给buildEffectX()
方法的一些配置数据外,它们基本上是相同的:
模块 1 效果类:
@Injectable()
export class Module1Effects {
constructor(private store: Store<AppState>, private effectsBuilder: MyEffectsBuilder) { }
@Effect()
effect1$: Observable<Action> = this.effectsBuilder.buildEffect1(this.store, "Module1");
@Effect({ dispatch: false })
effect2$: Observable<Action> = this.effectsBuilder.buildEffect2(this.store, "Module1");
@Effect()
effect3$: Observable<Action> = this.effectsBuilder.buildEffect3(this.store, "Module1");
}
模块 2 效果类:
@Injectable()
export class Module2Effects {
constructor(private store: Store<AppState>, private effectsBuilder: MyEffectsBuilder) { }
@Effect()
effect1$: Observable<Action> = this.effectsBuilder.buildEffect1(this.store, "Module2");
@Effect({ dispatch: false })
effect2$: Observable<Action> = this.effectsBuilder.buildEffect2(this.store, "Module2");
@Effect()
effect3$: Observable<Action> = this.effectsBuilder.buildEffect3(this.store, "Module2");
}
我想尽可能减少这种样板。这里有没有解决的办法?@Effect()
的声明性意味着我必须这样做吗?