问题描述
我对Angular有点陌生,试图理解高级开发人员编写的代码。如果我不遵守标准的交流习惯和言语,请原谅我。
我有一个抽象类abstractDatService
和一个抽象方法getEntities()
,它们的实现类分别为impl1
和impl2
实现类如下:
@Injectable()
export class impl1 extends abstractDatService{
private entities: Modal[] = [
{
id: 1,type: "a",name: "a1"
},{
id: 2,name: "a2"
}
];
public getEntities(): Observable<Modal[]> {
return of(this.entities);
}
}
现在,在我的模块中,我试图将服务注入为:
providers: [
{
provide: abstractDatService,useClass: impl1
},{
provide: abstractDatService,useClass: impl2
}
]
在这种情况下,当我尝试获取实体时,它们仅返回impl2
类的实体,而不返回impl1
类的实体
我希望实现将两者都返回。
有人可以帮我解决这个问题吗?
编辑:
详细说明
我具有用于显示数据的组件
HEAD1
Data from impl1 // this line is a common component in which there is a ngFor on observable returned.
HEAD2
Data from impl2 // this line is a common component in which there is a ngFor on observable returned.
通用组件是显示来自impl1的数据和来自impl2的数据的组件。
解决方法
根据评论
请详细说明。您想要两者都意味着什么?您是说要让注入的服务是两者的组合,以便getEntities返回两者的元素吗?
是的,我想以某种方式注入模型impl1和impl2的数据
您需要更改2件事。
第一:您的提供商定义包括multi: true
providers: [
{
provide: AbstractionService,useClass: Impl1Service,multi: true,},{
provide: AbstractionService,useClass: Impl2Service,}
]
2nd:处理带有数组的多次注入
constructor(@Inject(AbstractionService) impls: AbstractionService[]) {
const obs$ = impls.map(impl => impl.getEntities());
combineLatest(obs$).subscribe(console.log);
}
在stackblitz上进行检查:https://stackblitz.com/edit/angular-ivy-pwysue?file=src/app/app.module.ts