Wofür ist der Leseparameter in @ViewChild?

92

Benötigen Sie Hilfe, um die Bedeutung von {read: ViewContainerRef} in der folgenden Anweisung zu verstehen.

@ViewChild('myname', {read: ViewContainerRef}) target;
Pankaj Kapare
quelle
4
siehe das
Ankit Singh

Antworten:

116

Dem Element-Tag mit der #mynameVorlagenvariablen können mehrere Instanzen verschiedener Typen zugeordnet sein .

Für jedes Element gibt es ein ElementRefundViewContainerRef (möglicherweise andere aus Komponenten oder Anweisungen, die auf dieses Tag angewendet werden).

Wenn das Element eine Komponente ist, gibt es die Komponenteninstanz.

Es können auch eine oder mehrere Anweisungen auf das Element angewendet werden

Mit geben {read: SomeType}Sie an, welcher Typ vom Element mit der #mynameVorlagenvariablen zurückgegeben werden soll.

Wenn Sie den readParameter nicht angeben, wird @ViewChild()der zurückgegeben

  • ElementRef Instanz, wenn keine Komponente angewendet wird, oder die
  • Komponenteninstanz, falls vorhanden.
  • Wenn Sie etwas anderes erhalten möchten, müssen Sie explizit using angeben read.

Siehe auch Wie kann ich ein Element in einer Komponentenvorlage auswählen?

Günter Zöchbauer
quelle
'Vielleicht andere aus Komponenten oder Anweisungen, die auf dieses Tag angewendet werden': Wie können wir die vollständige Liste der möglichen Typen erhalten?
Ghetolay
Die Anweisungen und Komponenten, die in directives: [...]der aktuellen Komponente aufgeführt sind oder in PLATFORM_DITECTIVESdenen ein Selektor übereinstimmt. Sie können stackoverflow.com/questions/35233572/… verwenden , um eine laufende Anwendung zu untersuchen.
Günter Zöchbauer
3
Dies unterstützt nur Winkeltypen, die einem Knoten zugeordnet sind. HTMLElementist keiner von ihnen. ElementRefermöglicht den Zugriff auf das HTMLElement mit `ElementRef.nativeElement.
Günter Zöchbauer
1
Probieren Sie einfach alle möglichen Dinge aus und untersuchen Sie die Angular2-Quelle.
Günter Zöchbauer
1
Sie können nicht, wenn das Element eine Komponente ist. Sie können nur angeben, was Sie wollen, wenn Sie verwenden@ViewChild(... read: ElementRef) ...
Günter Zöchbauer