2016-06-22 10 views
0

私は2つの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に必要なすべてのパラメータを渡す必要があります。代わりに角がありますかSalesReceiptRepoistoryオブジェクトを作成したときに、基底クラスと派生クラスへの依存性はinjectになりますか?または、基底クラスはその派生クラスから継承しますか?少し混乱、簡単にあなたがInvocieRepositoryコンストラクタの第三parameterを見れば、InvoiceTypeenumであると私は最初の値にそれをデフォルトにしていますどのように一緒にこれらの二つの作品

2)説明してください。しかし、consoleステートメントでは、ログ値はapi/であり、実際には4番目の値parameterです。つまり、3番目と4番目のパラメータの値をapi/に設定し、3番目のパラメータは1でなければなりません。これは、InvoiceRepositoryオブジェクトが取得されたときにのみ発生しますが、SalesReceipRepositoryオブジェクトが作成されるとうまく動作します。どうして?

+0

2)なぜこのパラメータを最初に追加したのですか? 'provide(InvoiceType:{useValue:InvoiceType.SomeItem})'をどこかに提供しましたか? –

+0

いいえ、私は 'InvoiceRepository'インスタンスがDIによって作成されたときにそれをデフォルト値に設定します。しかし、 'SalesReceiptRepository'の場合、私は手動で基本クラス' constructor'を呼び出して正しく動作するように見えます。 –

+0

を参照してください。私はオプションとしてマークするために、パラメータ名の最後に '?'( 'invocieType?:InvoiceType = ...')を追加する必要があると思います。また、パラメータリストの最後にオプションのパラメータを移動する必要があるかもしれません(これについてはわかりません)。 –

答えて

1

Angularは派生クラスにのみ挿入されるため、すべてのパラメータをスーパーコンストラクタに再生成する必要があります。状況をよりよく理解するには、コードが絶対的に正しいと思われるため、このサービスをどこでどのように提供するかを確認する必要があります。

関連する問題