O evento de mudança é chamado somente depois que o foco da entrada foi alterado. Como posso fazer com que o evento seja acionado a cada pressionamento de tecla?
<input type="text" [(ngModel)]="mymodel" (change)="valuechange($event)" />
{{mymodel}}
A segunda ligação é alterada a cada pressionamento de tecla.
Use
ngModelChange
dividindo a[(x)]
sintaxe em suas duas partes, ou seja, ligação de dados de propriedades e ligação de eventos:Também funciona para a tecla backspace.
fonte
O evento (keyup) é sua melhor aposta.
Vamos ver o porquê:
Então (keyup) é o mais seguro, porque ele ...
fonte
keyup
é com certeza uma das opções mais seguras, no entanto, oinput
evento está um passo à frentekeyup
.keyup
ao contrárioinput
, não funciona se o valor da caixa de texto for alterado de qualquer outra maneira, por exemplo, vinculação.(change)
ao lado de uma solução alternativa e depois de algumas. A resposta aceita é péssima!(ngModelChange)
?fonte
keydown
oukeyup
não. Algumas teclas simplesmente não são acionadaskeypress
. Veja também stackoverflow.com/questions/4843472/…Uma maneira diferente de lidar com esses casos é usar o formControl e se inscrever
valueChanges
quando o componente for inicializado, o que permitirá que você use operadores rxjs para requisitos avançados, como a solicitação de http, aplique um debounce até que o usuário termine de escrever uma frase, use o último valor e omitir anterior, ...fonte
FormGroup
O evento secreto que mantém ngModel angular sincronizado é a entrada da chamada de evento . Portanto, a melhor resposta para sua pergunta deve ser:
fonte
arquivo .ts
fonte
O que você está procurando é
Em seguida, faça o que quiser com os dados acessando o limite
this.mymodel
no seu arquivo .ts.fonte
No meu caso, a solução é:
fonte
Para formulários reativos, você pode assinar as alterações feitas em todos os campos ou apenas em um campo específico.
Obtenha todas as alterações de um FormGroup:
Obtenha a alteração de um campo específico:
fonte
Eu tenho usado keyup em um campo numérico, mas hoje notei no chrome que a entrada possui botões para cima / para baixo para aumentar / diminuir o valor que não é reconhecido pelo keyup.
Minha solução é usar o keyup e alterar juntos:
Os testes iniciais indicam que isso funciona bem; serão postados de volta se houver algum erro encontrado após testes adicionais.
fonte