2016-11-29 7 views
0

私はes6、typescript、Angular2の新機能を使用しています。私はディレクティブの例を試しました。それはAngular2注射剤はありますか?

import { Directive, ElementRef, Input, Renderer } from '@angular/core'; 

@Directive({ selector: '[myHighlight]' }) 

export class HighlightDirective { 
    constructor() { 

    console.log(new ElementRef()) 
     //renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'green'); 
    } 
} 

もこれを試してみました。..

import { Directive, ElementRef, Input, Renderer } from '@angular/core'; 

@Directive({ selector: '[myHighlight]' }) 

export class HighlightDirective { 
    constructor(ElementRef, Renderer) { 

    console.log(new ElementRef()) 
     //renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'green'); 
    } 
} 

私は.. ..

import { Directive, ElementRef, Input, Renderer } from '@angular/core'; 

@Directive({ selector: '[myHighlight]' }) 

export class HighlightDirective { 
    constructor(el: ElementRef, renderer: Renderer) { 
     renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'green'); 
    } 
} 

に従い、私は変種以下試してみましたように見えますが、私は期待どおりに動作しませんでしたel:ElementRefの構文と通常のオブジェクトインスタンスの作成はnew ElementrRef ..これらの違いとそれらの背後にある論理を説明してください。el:ElementRef関係とそれに相当するものは、通常のものとes6 jsです。

+0

テンプレートファイルをapp.component.tsに含めましたか、app.module宣言にインポートするのを忘れましたか? – Mohanavel

+0

友人、私は..を含んでいます..そして、それはここで問題ではありません。最初のコードサンプルは動作していますが、なぜ2番目と3番目が同じ方法で動作していないのですか...そのコードサンプルの違いは何ですか?コードサンプルを正確に(el:ElementRef、renderer:Renderer)この行は何ですか? – shivaraj

答えて

2

これは角度2依存性注入。要約すると、コンポーネントなどでサービスなどを参照する必要がある場合は、constructorでAngularに問い合わせる必要があります。 constructor(el: ElementRef, renderer: Renderer)の場合、基本的にフレームワークを要求しています。「私のためにハイライトディレクティブを作成するときは、ElementRefRendererという2つのオブジェクトを私に与えてください。

これらの2つのオブジェクトはどのようにして得られますか?ディレクティブのライフサイクル中のDIフレームワークを通して。私は強く、より良い理解のために、この素​​晴らしい記事を読むことをお勧めし(それは必見です):(あなたのconstructorはそう何もは、作成時に、あなたのディレクティブにを注入されない空である)第二と第三の例ではhttp://blog.thoughtram.io/angular/2015/05/18/dependency-injection-in-angular-2.html

、あなたをなど、より多くの依存関係が必要なため、ElementRefnew()を作成することはできません。https://angular.io/docs/js/latest/api/core/index/ElementRef-class.html しかし、これらは提供されておらず、単純にできません。

関連する問題