Angular - 5.12-Accéder au modèle et au DOM avec @ViewChild
Dans la leçon précédente, nous avons découvert les références locales et nous les
passons depuis le template lors de l'appel d'une méthode. Cela fonctionne, mais il
existe une autre manière d'accéder à une référence locale — ou à n'importe quel
élément — directement depuis le code TypeScript, parfois avant même
qu'une méthode soit appelée. Le décorateur en question est @ViewChild.
Sélectionner un élément avec @ViewChild
On commence par ajouter une référence locale #serverContentInput sur
l'input correspondant. Dans la classe du cockpit, on déclare ensuite une propriété
décorée avec @ViewChild, importé depuis @angular/core. Le
décorateur prend un argument qui désigne ce qu'on veut sélectionner :
@ViewChild('serverContentInput') serverContentInput: ElementRef;
onAddServer(serverNameInput: HTMLInputElement) {
console.log(this.serverContentInput.nativeElement.value);
}
- passer une chaîne (par exemple
'serverContentInput') cible une référence locale ; - passer un type de composant (par exemple
CockpitComponent) cible la première occurrence de ce composant dans le template ; - la valeur retournée est de type
ElementRef(à importer aussi depuis@angular/core) — la valeur réelle de l'input s'obtient vianativeElement.value; - contrairement à la référence locale passée en argument, qui donnait directement l'élément complet,
@ViewChildrenvoie une enveloppeElementRef.
C'est l'outil idéal quand le composant doit accéder à un élément ou à un enfant avant d'avoir reçu un clic. Dans la plupart des cas, c'est la sélection par référence locale qui revient le plus souvent.