2017-09-17 10 views
2

角型コンポーネントでは、typescriptで記述され、クラスメンバー(変数)をコンストラクタのパラメータとして宣言することができます。私の質問は、そうする理由です。
自分自身を明確にするには、以下のスニペットをご覧ください。どちらも同じ意味を持っています。Angular2における依存性注入の構文

  • 最初は、(ほとんどのOO言語で行われているように)依存関係注入メカニズムを使用してプライベートメンバーを定義する古典的な方法です。
  • 後者は、誤解されていなければ、TypeScriptの特異性です。私の意見で
  • export class HeroListComponent implements OnInit { 
        // private member declaration 
        private heroService:HeroService; 
    
        // constructor signature 
        constructor(service:HeroService) { 
         // private member assignment 
         this.heroService = service; 
        } 
    } 
    
    export class HeroListComponent implements OnInit { 
        // here the private member is declared inside the constructor signature 
        constructor(private heroService:HeroService) { } 
    } 
    


は、最初の構文が明確と活字体になじみのない人にとって理解しやすいです。
私は、後者を使用するために、コードが最終的には縮小/醜いので、それほど短くすることは別として、特別な理由があるかどうか疑問に思っていました。ありがとう。

+0

これは角度そのものとは関係ありません。 –

答えて

4

編集:この答えは2番目の例では、このように見えた元の質問(今、編集)、アドレス:2番目の例では

export class HeroListComponent implements OnInit { 
    // here the private member is declared inside the constructor signature 
    constructor(private service:HeroService) { 
     this.heroService = service; 
    } 
} 

を、あなたは実際に2つのクラスのプロパティを作成しています。あなたのオブジェクトにはthis.servicethis.heroServiceの両方が存在します。

あなたの第二の例は、これを行うようなものです:あなたのクラスのプロパティは、コンストラクタ内のパラメータと同じ名前を持つことができる場合は、2番目の例では、スタイルはあなたに利益をもたらす

export class HeroListComponent implements OnInit { 
    private heroService: HeroService; 
    private service: HeroService; 

    constructor(service:HeroService) { 
     this.service = service; 
     this.heroService = service; 
    } 
} 

。彼らは両方のheroService名前を付けることができれば、その後、あなただけ行うことができます:

export class HeroListComponent implements OnInit { 
    constructor(private heroService:HeroService) { } 
} 

利点は、それが混乱を取り除くだけということです。クラス内のプロパティの宣言と、そのクラスプロパティへのコンストラクタパラメータの代入の両方が終了しました。それは必ずしもより清潔であるか、またはあなたにより読みやすいものではないかもしれません。

+0

あなたが正しいです、私は混乱を避けるためにコードを編集しました。したがって、あなたが説明するものが最初のスニペットに当てはまります。この場合、2つのプロパティが作成されます: 'service'と 'heroService'は、TypeScriptインタプリタの動作です。 –

+1

@CédricFrançoys私はこれもあなたの主要な質問に答えることを望みます - このスタイルの唯一の利点は、それがより簡潔であることです。 –