Verweis auf eine Richtlinie in einem Bauteil
Ich habe eine Komponente, deren Vorlage sieht ungefähr so aus:
<div [my-custom-directive]>Some content here</div>
Ich brauche den Zugriff auf die MyCustomDirective
Instanz der Klasse verwendet. Wenn ich will, um Zugang zu einer Kind-Komponente, verwende ich eine ViewChild
Abfrage.
Gibt es eine entsprechende Funktion, um Zugang zu einem Kind Richtlinie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
exportAs
Eigenschaft des@Directive
annotation. Es exportiert die Richtlinie verwendet werden, in der übergeordneten Ansicht. Aus der übergeordneten Sicht können Sie binden Sie es an einen view-Variablen und diese von der übergeordneten Klasse mithilfe von@ViewChild()
.Beispiel Mit einem plunker:
Update
Wie bereits erwähnt in den Kommentaren, es gibt eine alternative zu dem obigen Ansatz.
Anstatt
exportAs
könnte man direkt verwenden@ViewChild(MyCustomDirective)
oder@ViewChildren(MyCustomDirective)
Hier ist etwas code zu zeigen, den Unterschied zwischen den drei Ansätzen:
Update
Ein weiterer plunker mit mehr Klarheit
cdire
direkt wie@ViewChild(MyCustomDirective) element:MyCustomDirective;
Dann, inngAfterViewInit - this.element.logSomething('text from...')
. Warum also dein Ansatz, wenn direkt nur durch die übergabe der Typ, den Sie tun können? Gerade für die Klarstellung.MyCustomDirective
. Wenn es mehrere Richtlinien, werde es übereinstimmt, die der ersten ein. Aber, wenn mitexportAs
können Sie angeben, einen bestimmten, zum Beispiel der zweiteMyCustomDirective
.@ViewChildren()
ViewChild()
es sei denn, Sie möchten, dass alle oder die erste Instanz des Typs. Ich fügte hinzu, neue plunkerSecond
ohne VerwendungexportAs
?@ViewChild('cdire', {read:MyCustomDirective}) secondMyCustomDirective: MyCustomDirective
, und<div #cdire my-custom-directive>Second</div>
(keine exportAs erforderlich).exportAs
. Sehr guter Punkt! Danke!Scheint es, dass, da @Abdulrahman Antwort, Richtlinien kann nicht mehr zugegriffen werden, aus
@ViewChild
oder@ViewChildren
wie diese passieren nur Elemente, die auf das DOM-element selbst.Stattdessen müssen Sie die Richtlinien mit
@ContentChild
/@ContentChildren
.Gibt es auch nicht mehr ein
directives
Eigenschaft auf@Component
Attribut.this.firstMyCustomDirective
istundefined