2016-06-22 2 views
0

내가 두 TS이 저장소 클래스각도 2 DI와 타이프 라이터 상속

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) 내가 InvoiceRepository에서 SalesReceiptRepository 상속하고있어, 나는 super 클래스 constructor에 필요한 모든 매개 변수를 전달해야합니다. 고마워요 injectSalesReceiptRepoistory 객체를 생성 할 때 기본 클래스 및 파생 클래스에 종속됩니까? 또는 기본 클래스는 파생 클래스에서 가져옵니다? 약간의 혼동, 짧게는 InvocieRepository 생성자 3 parameter 보면, InvoiceTypeenum 내가 처음 값으로 디폴트있어 방법이 두 작품

2) 설명해주십시오. 그러나 console 문에서 로깅 값은 api/이며 실제로는 4 번째 값인 parameter입니다. 그래서, 3 번째와 4 번째 매개 변수 값을 모두 api/으로 설정하고, 세 번째 것은 1이어야합니다. 이것은 InvoiceRepository 객체가 get'screated 될 때만 발생하지만, SalesReceipRepository 객체가 생성 될 때 잘 동작합니다. 왜?

+0

2) 왜이 매개 변수를 처음에 추가 했습니까? 'provide (InvoiceType : {useValue : InvoiceType.SomeItem})'어딘가를 제공 했습니까? –

+0

아니요, DI로 만든 InvoiceRepository 인스턴스를 기본값으로 설정하고 싶습니다. 그러나'SalesReceiptRepository'의 경우에는'constructor'이라는 기본 클래스를 수동으로 호출하여 올바르게 작동하는 것처럼 보입니다. –

+0

나는 본다. 필자는 선택 사항으로 표시하기 위해 매개 변수 이름의 끝에 (? invocieType? : InvoiceType = ...) 끝에'? '를 추가해야한다고 생각합니다. 매개 변수 목록의 끝에 선택적 매개 변수를 이동해야 할 수도 있습니다 (이에 대해서는 확실하지 않음). –

답변

1

Angular는 파생 클래스에만 삽입하므로 모든 매개 변수를 슈퍼 생성자에 다시 채워야했습니다. 상황을 더 잘 이해하려면 코드가 절대적으로 적합하기 때문에이 서비스를 제공하는 위치와 방법을 알아야합니다.