Angular 2 ngModelИзменить старое значение
Может кто-нибудь, пожалуйста, скажите мне, что является лучшей практикой для сравнения старого и нового значения ngModel?
В angular 1:
$scope.$watch('someProperty', funciton(oldVal, newVal){
// code goes here
})
Я спрашиваю об этом, потому что (ngModelChange)
никогда не приносит мне oldVal
, только newVal
.
В моем случае я использую ngModel в теге <select>
и сравниваю старый выбор с новым:
<select [(ngModel)]="current" (ngModelChange)="onModelChange($event)">
<option *ngFor="let item of myArray" [ngValue]="item">{{item.name}} </option>
</select>
Ответы
Ответ 1
Это может работать
(ngModelChange)="onModelChange(oldVal, $event); oldVal = $event;"
или
(ngModelChange)="onModelChange($event)"
oldValue:string;
onModelChange(event) {
if(this.oldValue != event) {
...
}
this.oldValue = event;
}
Ответ 2
Пример с полем ввода...
<div *ngFor="let value of values">{{value}}
<input [(ngModel)]="value" (focus)="old=value" (ngModelchange)="doSomething(old, value)">
</div>
doSomething(oldVal, newVal) {
// some code
}
Ответ 3
Просто на будущее
мы должны заметить, что [(ngModel)] = "hero.name" - это просто кратчайший путь, который можно удалить с нуля: [ngModel] = "hero.name" (ngModelChange) = "hero.name = $ event ".
Так что, если мы удалим код из сахара, мы получим:
<select (ngModelChange)="onModelChange()" [ngModel]="hero.name" (ngModelChange)="hero.name = $event">
или же
<[ngModel]="hero.name" (ngModelChange)="hero.name = $event" select (ngModelChange)="onModelChange()">
Если вы осмотрите вышеприведенный код, вы заметите, что в итоге мы имеем 2 события ngModelChange, которые должны быть выполнены в некотором порядке.
Подведение итогов: если вы поместите ngModelChange перед ngModel, вы получите событие $ как новое значение, но ваш объект модели все еще будет иметь предыдущее значение. Если вы поместите его после ngModel, модель уже будет иметь новое значение.
ИСТОЧНИК