À quoi sert le paramètre de lecture dans @ViewChild

92

Besoin d'aide pour comprendre la signification de {read: ViewContainerRef} dans l'instruction suivante.

@ViewChild('myname', {read: ViewContainerRef}) target;
Pankaj Kapare
la source
4
voir ça
Ankit Singh

Réponses:

116

Il peut y avoir plusieurs instances de différents types associées à la balise d'élément avec la #mynamevariable de modèle.

Pour chaque élément, il y a un ElementRefetViewContainerRef (peut-être d'autres des composants ou des directives appliqués à cette balise).

Si l'élément est un composant, alors il y a l'instance de composant.

Il peut également y avoir une ou plusieurs directives appliquées à l'élément

Avec {read: SomeType}vous indiquez quel type doit être retourné à partir de l'élément avec la #mynamevariable de modèle.

Si vous ne fournissez pas le readparamètre, @ViewChild()renvoie le

  • ElementRef instance s'il n'y a pas de composant appliqué, ou
  • instance de composant s'il y en a.
  • Si vous souhaitez obtenir quelque chose de différent, vous devez spécifier explicitement using read.

Voir aussi Comment sélectionner un élément dans un modèle de composant?

Günter Zöchbauer
la source
'peut-être d'autres à partir de composants ou de directives appliqués à cette balise': Comment pouvons-nous obtenir la liste complète des types possibles?
Ghetolay
Les directives et les composants répertoriés dans directives: [...]du composant actuel ou dans PLATFORM_DITECTIVESlesquels un sélecteur correspond. Vous pouvez utiliser stackoverflow.com/questions/35233572/… pour enquêter sur une application en cours d'exécution.
Günter Zöchbauer
3
Cela prend uniquement en charge les types angulaires associés à un nœud. HTMLElementn'en fait pas partie. ElementRefpermet d'accéder au HTMLElement en utilisant `ElementRef.nativeElement.
Günter Zöchbauer
1
Juste essayer toutes sortes de choses et enquêter sur la source Angular2.
Günter Zöchbauer
1
Vous ne pouvez pas lorsque l'élément est un composant. Vous ne pouvez spécifier ce que vous voulez que si vous utilisez@ViewChild(... read: ElementRef) ...
Günter Zöchbauer