Las variables de referencia de plantilla son una pequeña joya que permite hacer muchas cosas buenas con Angular. Normalmente llamo a esa característica "la sintaxis de hashtag" porque, bueno, se basa en un simple hashtag para crear una referencia a un elemento en una plantilla:
<input #phone placeholder="phone number">
Lo que hace la sintaxis anterior es bastante simple: crea una referencia al elemento de entrada que se puede usar más adelante en mi plantilla. Tenga en cuenta que el alcance de esta variable es la plantilla HTML completa en la que se define la referencia.
Así es como podría usar esa referencia para obtener el valor de la entrada, por ejemplo:
<!-- phone refers to the input element -->
<button (click)="callPhone(phone.value)">Call</button>
Tenga en cuenta que el teléfono hace referencia a la instancia del objeto HTMLElement para la entrada . Como resultado, teléfono tiene todas las propiedades y métodos de cualquier elemento HTMLE (id, nombre, innerHTML, valor, etc.)
Lo anterior es una buena manera de evitar el uso de ngModel u otro tipo de enlace de datos en una forma simple que no requiere mucho en términos de validación.
¿Esto también funciona con componentes?
¡La respuesta es sí!
... la mejor parte es que estamos obteniendo una referencia a la instancia del componente real, HelloWorldComponent, para que podamos acceder a cualquier método o propiedades de ese componente (incluso si se declaran como privados o protegidos, lo cual es sorprendente) :
@Component({
selector: 'app-hello',
// ...
export class HelloComponent {
name = 'Angular';
}
[...]
<app-hello #helloComp></app-hello>
<!-- The following expression displays "Angular" -->
{{helloComp.name}}
#searchBoxen el elemento es lo que le permite usarsearchBox.valueen el controlador de keyup.