1

HttpClientを拡張するクラスを作成していて、というキーワードからincludeEventsInまで拡張すると、BaseServiceをEventAggregatorタイプに拡張します。コードhereを参照してください。Typescriptに "this"キーワードを通してクラス定義を含めるにはどうすればいいですか?

質問

  • どのように私はHttpClientを一緒にBaseServiceクラスのEventAggregatorメソッドや小道具を含めることができますか?
  • クラス(BaseService)を2つのクラスで拡張する別のアプローチは何でしょうか?

ここにコードがあります。

@transient() 
export class BaseService extends HttpClient { 
    constructor() { 
     super(); 
     includeEventsIn(this); 
    } 
} 
+1

'BaseClass'に' EventAggreator'を注入する必要があります。しかし、継承を使わずに、 'HttpClient'と' EventAggregator'を両方 '' BaseClass'に注入すると意味があると思います... –

+0

EventAggregatorとHttpClientのメソッドとプロパティは、ベースクラスでは利用できません。手動ですべてのプロパティとメソッドを実装する必要があるため、注入する必要はありません – janmvtrinidad

答えて

2

オーレリアアプリケーションを構築するときに絶対に必要な場合を除きあなたは、継承を使用しないでください(と私はそれが必要なことはない主張するだろう)。継承よりも構成を優先します。 HttpClientEventAggregatorへの依存を取る(あなたは、もはや継承を使用していないことになるので、ないBaseService

たとえば、あなたのケースでは、私がServiceを持っているでしょう。 includeEventsInへの呼び出しによって追加されるすべての機能が本当に必要であるかどうかは疑問です。あなたがそれを必要とするならば、あなたは単にServiceに3つの機能を加えることができます。

import {inject, EventAggregator} from 'aurelia-framework'; 
import {HttpClient} from 'aurelia-fetch-client'; 

@inject(HttpClient, EventAggregator) 
export class Service { 
    constructor(http, ea) { 
    this.http = http; 
    this.ea = ea; 
    } 
} 

、必要に応じて、それが必要とするものは何でも機能実装した後、別のクラスの中で、このクラスを注入することができます。

+0

意味があります。しかし、疑問のために、typesScriptでは、includeEventsInを使用するときにこのキーワードを通してクラス定義(小道具とメソッド)を拡張することが可能ですか? – janmvtrinidad

+0

私はそれを行うためのデコレータの作成を見ていきます。 'includeEventsIn'はミックスイン型のものです。 –

+0

私はアシュリーサイヤマンに同意します! –

関連する問題