我有两个TS存储库类
1)InvoiceRepository 2)SalesReceiptRepositroy
以下是构造函数的外观
InvoiceRepository
export class InvoiceRepository extends RepositoryBase {
constructor(
protected http: Http,
protected toasterService: ToasterService,
protected progressbarService: ProgressBarService,
invocieType: InvoiceType = InvoiceType.Invoice,
@Inject('ApiEndpoint') protected apiEndpoint: string) {
super(toasterService, progressbarService);
console.log(invocieType);
}
}
SalesReceiptRepositroy
export class SalesReceiptsRepository extends InvoiceRepository {
constructor(http: Http,
toasterService: ToasterService,
progressbarService: ProgressBarService,
@Inject('ApiEndpoint') apiEndpoint: string) {
super(http, toasterService, progressbarService, InvoiceType.InvoiceCC, apiEndpoint);
}
}
问题:
1)我从SalesReceiptRepository
继承了InvoiceRepository
,我必须将所有必需的参数传递给super
类constructor
。当inject
对象被创建时,Angular会对Base类和Derived类分别SalesReceiptRepoistory
依赖吗?或者基类将从它的派生类中获取?有点混淆,请简要说明这两者如何一起工作
2)如果您查看InvocieRepository
构造函数3rd parameter
,InvoiceType
是enum
,我将其默认为第一个值。但是在console
语句中,它的记录值api/
实际上是第4 parameter
的值。那么,它正在做什么,将第3和第4参数值都设置为api/
,其中第3个应该是1
。这仅在InvoiceRepository
对象被创建时发生,但是在创建SalesReceipRepository
对象时它表现良好。为什么呢?
答案 0 :(得分:1)
Angular将仅在派生类中注入,因此您需要将每个参数都重新输入到超级构造函数中。为了更好地了解这种情况,我需要了解您提供此服务的位置和方式,因为代码看起来绝对正确。