Winkel 1 akzeptiert kein onchange()
Ereignis, sondern nur ng-change()
Ereignis.
Angular 2 hingegen akzeptiert sowohl Ereignisse (change)
als auch (ngModelChange)
Ereignisse, die beide dasselbe zu tun scheinen.
Was ist der Unterschied?
Welches ist am besten für die Leistung?
ngModelChange :
<input type="text" pInputText class="ui-widget ui-text"
(ngModelChange)="clearFilter()" placeholder="Find"/>
vs change :
<input type="text" pInputText class="ui-widget ui-text"
(change)="clearFilter()" placeholder="Find"/>
javascript
html
angular
typescript
angular-ngmodelchange
Ramesh Rajendran
quelle
quelle
Antworten:
(change)
Ereignis, das an das klassische Eingabeänderungsereignis gebunden ist.https://developer.mozilla.org/en-US/docs/Web/Events/change
Sie können das Ereignis (Ändern) verwenden, auch wenn Sie kein Modell als Eingabe haben
(ngModelChange)
ist die@Output
Direktive von ngModel. Es wird ausgelöst, wenn sich das Modell ändert. Sie können dieses Ereignis nicht ohne die Anweisung ngModel verwenden.https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L124
Wenn Sie mehr im Quellcode entdecken, wird
(ngModelChange)
der neue Wert ausgegeben.https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L169
Es bedeutet also, dass Sie die Möglichkeit einer solchen Verwendung haben:
Grundsätzlich scheint es keinen großen Unterschied zwischen zwei zu geben, aber
ngModel
Ereignisse gewinnen an Kraft, wenn Sie sie verwenden[ngValue]
.Angenommen, Sie versuchen dasselbe ohne "
ngModel
Dinge".quelle
<input (ngModelChange)="modelChanged($event)">
ist nicht richtig,[ngModel]
ist erforderlich.(change)
, in diesem Fall können Sie ein(onClick)="yourFunction(youParameter)"
In Winkel 7 wird der
(ngModelChange)="eventHandler()"
Wille ausgelöst, bevor der gebundene Wert[(ngModel)]="value"
geändert wird, während der(change)="eventHandler()"
Wille ausgelöst wird, nachdem der gebundene Wert[(ngModel)]="value"
geändert wurde.quelle
ngModelChange
wird nach der Aktualisierung des Ansichtsmodells ausgelöst.(ngModelChange)
Ereignis tatsächlich ausgelöst, bevor der Wert geändert wird und(change)
nachdem er sich geändert hat. Danke für die Info, super hilfreich!Wie ich in einem anderen Thema gefunden und geschrieben habe - dies gilt für Winkel <7 (nicht sicher, wie es in 7+ ist)
Nur für die Zukunft
Wir müssen beachten, dass dies
[(ngModel)]="hero.name"
nur eine Abkürzung ist, die entzuckert werden kann :[ngModel]="hero.name" (ngModelChange)="hero.name = $event"
.Wenn wir also den Code entzuckern, würden wir am Ende Folgendes haben:
<select (ngModelChange)="onModelChange()" [ngModel]="hero.name" (ngModelChange)="hero.name = $event">
oder
<[ngModel]="hero.name" (ngModelChange)="hero.name = $event" select (ngModelChange)="onModelChange()">
Wenn Sie den obigen Code überprüfen, werden Sie feststellen, dass wir am Ende zwei
ngModelChange
Ereignisse haben, die in einer bestimmten Reihenfolge ausgeführt werden müssen.Zusammenfassend: Wenn Sie
ngModelChange
zuvor platzierenngModel
, erhalten Sie den$event
Wert als neuen Wert, aber Ihr Modellobjekt enthält weiterhin den vorherigen Wert. Wenn Sie es danach platzierenngModel
, hat das Modell bereits den neuen Wert.QUELLE
quelle
1 -
(change)
ist an das HTML onchange-Ereignis gebunden. In der Dokumentation zu HTML onchange heißt es:Quelle: https://www.w3schools.com/jsref/event_onchange.asp
2 - Wie bereits erwähnt,
(ngModelChange)
ist an die Modellvariable gebunden, die an Ihre Eingabe gebunden ist.Meine Interpretation lautet also:
(change)
wird ausgelöst, wenn der Benutzer die Eingabe ändert(ngModelChange)
Wird ausgelöst, wenn sich das Modell ändert, unabhängig davon, ob es einer Benutzeraktion folgt oder nichtquelle