Angular 1 não aceita onchange()
evento, apenas aceita ng-change()
evento.
O Angular 2, por outro lado, aceita ambos (change)
e (ngModelChange)
eventos, que ambos parecem estar fazendo a mesma coisa.
Qual é a diferença?
qual é o melhor para o desempenho?
ngModelChange :
<input type="text" pInputText class="ui-widget ui-text"
(ngModelChange)="clearFilter()" placeholder="Find"/>
vs mudança :
<input type="text" pInputText class="ui-widget ui-text"
(change)="clearFilter()" placeholder="Find"/>
javascript
html
angular
typescript
angular-ngmodelchange
Ramesh Rajendran
fonte
fonte
Respostas:
(change)
evento vinculado ao evento de alteração de entrada clássica.https://developer.mozilla.org/en-US/docs/Web/Events/change
Você pode usar o evento (change) mesmo que não tenha um modelo em sua entrada como
(ngModelChange)
é a@Output
diretiva ngModel. É acionado quando o modelo é alterado. Você não pode usar este evento sem a diretiva ngModel.https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L124
À medida que você descobre mais no código-fonte,
(ngModelChange)
emite o novo valor.https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L169
Então isso significa que você tem a capacidade de tal uso:
Basicamente, parece que não há grande diferença entre dois, mas os
ngModel
eventos ganham força quando você o usa[ngValue]
.suponha que você tente a mesma coisa sem "
ngModel
coisas"fonte
<input (ngModelChange)="modelChanged($event)">
não está certo,[ngModel]
é necessário.(change)
, neste caso, você pode fazer um(onClick)="yourFunction(youParameter)"
No Angular 7, o
(ngModelChange)="eventHandler()"
disparo será acionado antes que o valor vinculado[(ngModel)]="value"
seja alterado, enquanto o(change)="eventHandler()"
disparo será acionado após o valor vinculado a[(ngModel)]="value"
ser alterado.fonte
ngModelChange
acionado após a atualização do modelo de exibição.(ngModelChange)
evento é disparado antes que o valor seja alterado e(change)
depois que ele foi alterado. Obrigado pela informação, super útil!Como eu encontrei e escrevi em outro tópico - isso se aplica a angular <7 (não tenho certeza de como está no 7+)
Apenas para o futuro
precisamos observar que
[(ngModel)]="hero.name"
é apenas um atalho que pode ser retirado o açúcar para:[ngModel]="hero.name" (ngModelChange)="hero.name = $event"
.Portanto, se descodificarmos o código, acabaremos com:
<select (ngModelChange)="onModelChange()" [ngModel]="hero.name" (ngModelChange)="hero.name = $event">
ou
<[ngModel]="hero.name" (ngModelChange)="hero.name = $event" select (ngModelChange)="onModelChange()">
Se você inspecionar o código acima, notará que terminamos com 2
ngModelChange
eventos e esses precisam ser executados em alguma ordem.Resumindo: se você colocar
ngModelChange
antesngModel
, obtém o$event
valor como novo, mas o objeto do modelo ainda mantém o valor anterior. Se você o colocar depoisngModel
, o modelo já terá o novo valor.FONTE
fonte
1 -
(change)
está associado ao evento HTML onchange. A documentação sobre o HTML onchange diz o seguinte:Fonte: https://www.w3schools.com/jsref/event_onchange.asp
2 - Como mencionado anteriormente,
(ngModelChange)
está vinculado à variável do modelo vinculada à sua entrada.Então, minha interpretação é:
(change)
dispara quando o usuário altera a entrada(ngModelChange)
é acionado quando o modelo muda, seja consecutivo a uma ação do usuário ou nãofonte