As variáveis de referência de modelo são uma pequena jóia que permite fazer muitas coisas legais com o Angular. Eu costumo chamar esse recurso de "sintaxe da hashtag" porque, bem, ele se baseia em uma hashtag simples para criar uma referência a um elemento em um modelo:
<input #phone placeholder="phone number">
O que a sintaxe acima faz é bastante simples: ele cria uma referência ao elemento de entrada que pode ser usado posteriormente no meu modelo. Observe que o escopo dessa variável é o modelo HTML inteiro no qual a referência está definida.
Aqui está como eu poderia usar essa referência para obter o valor da entrada, por exemplo:
<!-- phone refers to the input element -->
<button (click)="callPhone(phone.value)">Call</button>
Observe que phone refere-se à instância do objeto HTMLElement da entrada . Como resultado, o telefone possui todas as propriedades e métodos de qualquer HTMLElement (ID, nome, innerHTML, valor etc.)
A descrição acima é uma boa maneira de evitar o uso do ngModel ou algum outro tipo de ligação de dados de forma simples que não exija muito em termos de validação.
Isso também funciona com componentes?
A resposta é sim!
... a melhor parte disso é que estamos recebendo uma referência à instância real do componente, HelloWorldComponent, para que possamos acessar quaisquer métodos ou propriedades desse componente (mesmo que sejam declarados como privados ou protegidos, o que é surpreendente) :
@Component({
selector: 'app-hello',
// ...
export class HelloComponent {
name = 'Angular';
}
[...]
<app-hello #helloComp></app-hello>
<!-- The following expression displays "Angular" -->
{{helloComp.name}}
#searchBox
no elemento é o que permite que você usesearchBox.value
no manipulador de chaves.