Angular 1 nie akceptuje onchange()
zdarzeń, tylko akceptuje ng-change()
zdarzenia.
Z drugiej strony, Angular 2 akceptuje oba zdarzenia (change)
i (ngModelChange)
zdarzenia, które wydają się robić to samo.
Co za różnica?
który jest najlepszy do wydajności?
ngModelChange :
<input type="text" pInputText class="ui-widget ui-text"
(ngModelChange)="clearFilter()" placeholder="Find"/>
vs zmiana :
<input type="text" pInputText class="ui-widget ui-text"
(change)="clearFilter()" placeholder="Find"/>
javascript
html
angular
typescript
angular-ngmodelchange
Ramesh Rajendran
źródło
źródło
Odpowiedzi:
(change)
zdarzenie powiązane z klasycznym zdarzeniem zmiany wejścia.https://developer.mozilla.org/en-US/docs/Web/Events/change
Możesz użyć (zmienić) zdarzenie, nawet jeśli nie masz modelu jako danych wejściowych
(ngModelChange)
jest@Output
dyrektywą ngModel. Uruchamia się, gdy zmienia się model. Nie możesz użyć tego zdarzenia bez dyrektywy ngModel.https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L124
Gdy odkryjesz więcej w kodzie źródłowym,
(ngModelChange)
emituje nową wartość.https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L169
Oznacza to, że masz możliwość takiego użycia:
Zasadniczo wydaje się, że nie ma dużej różnicy między dwoma, ale
ngModel
zdarzenia zyskują moc, gdy używasz[ngValue]
.Załóżmy, że próbujesz tego samego bez „
ngModel
rzeczy”źródło
<input (ngModelChange)="modelChanged($event)">
jest nie w porządku,[ngModel]
jest wymagane.(change)
, w tym przypadku możesz zrobić(onClick)="yourFunction(youParameter)"
W Angularze 7,
(ngModelChange)="eventHandler()"
będzie strzelać zanim zmieni się wartość związana z,[(ngModel)]="value"
podczas gdy(change)="eventHandler()"
będzie strzelać po[(ngModel)]="value"
zmianie wartości związanej z .źródło
ngModelChange
pożary po aktualizacji modelu widoku.(ngModelChange)
zdarzenie jest uruchamiane przed zmianą wartości i(change)
po jej zmianie. Dzięki za informację, super pomocna!Jak znalazłem i napisałem w innym temacie - dotyczy to kątownika <7 (nie jestem pewien, jak to jest w 7+)
Tylko na przyszłość
musimy stwierdzić, że
[(ngModel)]="hero.name"
to tylko skrót, który może być odcukrzanych do:[ngModel]="hero.name" (ngModelChange)="hero.name = $event"
.Więc jeśli usuniemy kod cukru, otrzymamy:
<select (ngModelChange)="onModelChange()" [ngModel]="hero.name" (ngModelChange)="hero.name = $event">
lub
<[ngModel]="hero.name" (ngModelChange)="hero.name = $event" select (ngModelChange)="onModelChange()">
Jeśli sprawdzisz powyższy kod, zauważysz, że mamy 2
ngModelChange
zdarzenia, które należy wykonać w określonej kolejności.Podsumowując: jeśli umieścisz
ngModelChange
wcześniejngModel
, otrzymasz$event
nową wartość, ale obiekt modelu nadal ma poprzednią wartość. Jeśli umieścisz go późniejngModel
, model będzie już miał nową wartość.ŹRÓDŁO
źródło
1 -
(change)
jest powiązany ze zdarzeniem HTML onchange. Dokumentacja dotycząca wymiany HTML zawiera następujące informacje:Źródło: https://www.w3schools.com/jsref/event_onchange.asp
2 - Jak wspomniano wcześniej,
(ngModelChange)
jest powiązany ze zmienną modelu powiązaną z danymi wejściowymi.Tak więc moja interpretacja jest następująca:
(change)
uruchamia się, gdy użytkownik zmieni dane wejściowe(ngModelChange)
wyzwala się, gdy model się zmienia, niezależnie od tego, czy jest to konsekwencja działania użytkownika, czy nieźródło