2016-09-02 3 views
1

Angular 2 rc 5 geschrieben mit typescript 1.9Wie bekomme ich eine Instanz meiner Angular 2-Direktive?

Ich möchte ein Handle auf die Instanz meiner Attribut-Anweisung erhalten. Ich benutze ViewChild, die mit Komponenten funktioniert, aber es gibt mir stattdessen ein Handle für das Element, das die Direktive hostet.

Vorlage

<span myHighlight #directive> Highlight me! </span> 

Komponente

/** Want handle to the directive. Instead gives handle to the span element */ 
@ViewChild('directive') directive:HighlightDirective; 

ngAfterViewInit(){ 
    console.log(this.directive); 
} 

Richtlinie

@Directive({ selector: '[myHighlight]' }) 
export class HighlightDirective { 
    constructor(el: ElementRef, renderer: Renderer) { 
     renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'yellow'); 
    } 
} 

Running plunker

Das <span> Element ist auf der Konsole gedruckt, so ViewChild ist nicht greifen, was ich brauche. Wie kann ich einen Verweis auf die Direktiveninstanz erhalten?

Antwort

1
@ViewChild('directive', {read: HighlightDirective}) directive:HighlightDirective; 

oder

@ViewChild(HighlightDirective) directive:HighlightDirective; 

aber dieser zweite Ansatz gibt die erste HighlightDirective, kein spezifisches.

+0

Hallo Gunter. Ihre erste Option bewirkt immer noch, dass der 'span' an die Konsole ausgegeben wird. Ihre zweite Option verursacht einen Absturz. Muss ich noch etwas tun? Hier ist ein Plünderer mit Ihrer Lösung: http://plnkr.co/edit/VrtqMMs0gSuvLkweu4FT?p=preview – BeetleJuice

+0

Wenn Sie mehr als eine Klasse in einer Datei haben und Sie die Klasse verweisen, muss es vor der Klasse, wo die Referenz ist benutzt. Klassen werden nicht in TS gehisst. Wenn Sie 'HighlightDirective' über' AppComponent' verschieben, funktioniert es gut http://plnkr.co/edit/3clXTT69CyWWs5faKZAN?p=preview –

+0

Danke. Ich lege die Direktive in eine eigene Datei und sehe, dass beide Vorschläge funktionieren (http://plnkr.co/edit/gvaa74YK6T4bldjdvjEB?p=preview). Ich bin aber gespannt auf die zweite Notation: Woher weiß 'Angular' dann, an welcher konkreten Instanz ich interessiert bin? Angenommen, es gibt einige 'HighlightDirective'-Instanzen in der Ansicht? – BeetleJuice

Verwandte Themen