¿Para qué sirve el parámetro de lectura en @ViewChild?

94

Necesita ayuda para comprender el significado de {read: ViewContainerRef} en la siguiente declaración.

@ViewChild('myname', {read: ViewContainerRef}) target;
Pankaj Kapare
fuente
4
vea esto
Ankit Singh

Respuestas:

119

Puede haber varias instancias de varios tipos asociados con la etiqueta de elemento con la #mynamevariable de plantilla.

Para cada elemento hay un ElementRefy ViewContainerRef(quizás otros de componentes o directivas aplicadas a esa etiqueta).

Si el elemento es un componente, entonces existe la instancia del componente.

También puede haber una o varias directivas aplicadas al elemento

Con {read: SomeType}usted indica qué tipo debe devolverse del elemento con la #mynamevariable de plantilla.

Si no proporciona el readparámetro, @ViewChild()devuelve el

  • ElementRef instancia si no hay ningún componente aplicado, o el
  • instancia de componente si la hay.
  • Si desea obtener algo diferente, debe especificar explícitamente using read.

Consulte también ¿Cómo puedo seleccionar un elemento en una plantilla de componente?

Günter Zöchbauer
fuente
'tal vez otros de componentes o directivas aplicadas a esa etiqueta': ¿Cómo podemos obtener la lista completa de tipos posibles?
Ghetolay
Las directivas y componentes enumerados en directives: [...]el componente actual o en PLATFORM_DITECTIVESdonde coincide un selector. Puede usar stackoverflow.com/questions/35233572/… para investigar en una aplicación en ejecución.
Günter Zöchbauer
3
Esto solo admite tipos angulares que están asociados con un nodo. HTMLElementno es uno de ellos. ElementRefpermite acceder a HTMLElement usando `ElementRef.nativeElement.
Günter Zöchbauer
1
Simplemente probando todo tipo de cosas e investigando la fuente de Angular2.
Günter Zöchbauer
1
No puede cuando el elemento es un componente. Solo puede especificar lo que desea si usa@ViewChild(... read: ElementRef) ...
Günter Zöchbauer