使用ngrx创建可重用的效果类?

时间:2018-11-29 19:41:42

标签: angular ngrx ngrx-effects

我试图在我的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()的声明性意味着我必须这样做吗?

0 个答案:

没有答案