¿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;

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?


'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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.