我在导入和重新使用使用ngrx实现的模块时遇到了问题。 在简单的Angular实现中,下面是用例
// Module
@NgModule({
imports: [
CommonModule
],
declarations: [BaseComponent],
exports: [
BaseComponent
],
providers: [
BaseService
]
})
export class BaseModule { }
//component
@Component({
selector: 'base-comp',
templateUrl: './base.component.html',
styleUrls: ['./base.component.css']
})
export class BaseComponent implements OnInit {
constructor(public service: BaseService) { }
ngOnInit() {
}
}
如果我将BaseModule导入另一个模块,请覆盖服务并使用' base-comp'组件,我得到BaseComponent
中注入的OverriddenService实例// module
@NgModule({
imports: [
CommonModule,
RouterModule.forChild([{
path: '',
component: SecondComponent
}]),
BaseModule,
],
declarations: [SecondComponent],
providers: [
{ provide: BaseService, useClass: OverridenService }
]
})
export class SecondModule { }
这一切都按预期工作。 现在,如果我使用ngrx实现了模块,并且在BaseEffect(base-effect.ts)的构造函数中注入了service - 如何实现相同的结果?如果我在SecondModule中注册一个新效果,则会有两个订阅同一个动作。
@Injectable()
export class BaseEffect {
constructor(private actions$: Actions,
private service: BaseService
) {
}
// Listing
@Effect()
listSegments$: Observable<Action> = this.actions$.ofType<MyAction>(MY_ACTION)
.map((action: MyAction) => action.payload)
.mergeMap((payload: Query) => {
return this.service.getList(payload).map(response =>
new ActionComplete(response)
)
});
}