(verandering) vs (ngModelChange) in hoekig
Angular 1 accepteert geen onchange()
event, het accepteert alleen ng-change()
event.
Angular 2, aan de andere kant, accepteert zowel (change)
als (ngModelChange)
gebeurtenissen, die beide hetzelfde lijken te doen.
Wat is het verschil?
Welke is het beste voor de prestaties?
ngModelwijziging:
<input type="text" pInputText class="ui-widget ui-text"
(ngModelChange)="clearFilter()" placeholder="Find"/>
vs wijziging:
<input type="text" pInputText class="ui-widget ui-text"
(change)="clearFilter()" placeholder="Find"/>
256
3
(change)
event gebonden aan klassieke input change event.https://developer.mozilla.org/en-US/docs/Web/Events/change
Je kunt (change) event ook gebruiken als je geen model bij je invoer hebt als
(ngModelChange)
is de@Output
van de ngModel directive. Het vuurt wanneer het model verandert. Je kunt dit event niet gebruiken zonder de ngModel directive.https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L124
Zoals je meer in de broncode ontdekt,
(ngModelChange)
zendt de nieuwe waarde uit.https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L169
Dus het betekent dat je de mogelijkheid hebt van dergelijk gebruik:
In principe lijkt het alsof er geen groot verschil is tussen de twee, maar
ngModel
gebeurtenissen winnen aan kracht als je[ngValue]
gebruikt.In Angular 7, zal de
(ngModelChange)="eventHandler()"
afgaan voordat de waarde gebonden aan[(ngModel)]="value"
wordt gewijzigd terwijl de(change)="eventHandler()"
zal afgaan na de waarde gebonden aan[(ngModel)]="value"
wordt gewijzigd.Zoals ik heb gevonden en schreef in een andere topic - dit geldt voor angular < 7 (niet zeker hoe het is in 7+)
Gewoon voor de toekomst
we moeten opmerken dat [(ngModel)]="hero.name" is gewoon een short-cut die kan worden de-sugared tot: [ngModel]="hero.name" (ngModelChange)="hero.name = $event".
Dus als we de code ontsuikeren zouden we eindigen met:
<select (ngModelChange)="onModelChange()" [ngModel]="hero.name" (ngModelChange)="hero.name = $event">
of
``
Als je de bovenstaande code inspecteert zul je zien dat we eindigen met 2 ngModelChange events en die moeten in een bepaalde volgorde worden uitgevoerd.
Samenvattend: Als je ngModelChange voor ngModel plaatst, krijg je de $event als de nieuwe waarde, maar je model object houdt nog steeds de vorige waarde. Als je het na ngModel plaatst, zal het model al de nieuwe waarde hebben.
BRON