Angular 角度2更改旧值

Angular 角度2更改旧值,angular,angular-ngmodel,angular2-forms,Angular,Angular Ngmodel,Angular2 Forms,有人能告诉我比较新旧价值的最佳做法是什么吗 在第1节中: $scope.$watch('someProperty', funciton(oldVal, newVal){ // code goes here }) 我这样问是因为(ngModelChange)从来没有给我带来oldVal,只有newVal 在我的例子中,我在标记中使用ngModel,并将旧选择与新选择进行比较: <select [(ngModel)]="current" (ngModelChange)="onMode

有人能告诉我比较新旧价值的最佳做法是什么吗

在第1节中:

$scope.$watch('someProperty', funciton(oldVal, newVal){
    // code goes here
})
我这样问是因为
(ngModelChange)
从来没有给我带来
oldVal
,只有
newVal

在我的例子中,我在
标记中使用ngModel,并将旧选择与新选择进行比较:

<select [(ngModel)]="current" (ngModelChange)="onModelChange($event)">
     <option *ngFor="let item of myArray" [ngValue]="item">{{item.name}} </option>
</select>

{{item.name}

带有输入字段的示例

<div *ngFor="let value of values">{{value}}
    <input [(ngModel)]="value" (focus)="old=value" (ngModelchange)="doSomething(old, value)">
</div>

doSomething(oldVal, newVal) {
    // some code
}
{{value}
doSomething(oldVal,newVal){
//一些代码
}
这可能有效

(ngModelChange)=“onModelChange(oldVal,$event);oldVal=$event;”

(ngModelChange)=“onModelChange($event)”
oldValue:字符串;
onModelChange(事件){
if(this.oldValue!=事件){
...
}
this.oldValue=事件;
}
只是为了将来

我们需要注意的是[(ngModel)]=“hero.name”只是一条捷径,可以简化为:[ngModel]=“hero.name”(ngModelChange)=“hero.name=$event”

因此,如果我们去糖代码,我们将得到:

如果您检查上面的代码,您会注意到我们最终会出现2个ngModelChange事件,这些事件需要按一定顺序执行

总结:如果您将ngModelChange放在ngModel之前,您将获得$event作为新值,但您的模型对象仍保留以前的值。 如果将其放置在ngModel之后,则该模型将已经具有新值


我尝试了此操作,但oldVal参数未定义。我在标签中使用了这个比较(请看我编辑的帖子),只是在components类中声明了一个具有这个名称的变量。我将它添加到我的代码中(在第二个示例中)好的,我现在就知道了。但是这个解决方案似乎非常手动,您确定这是最佳实践吗?angular 2没有提供任何用于获取旧值的内容?否,angular仅提供
$event
,或者如果您使用
[ngModel]=“myValue”
myValue
属性更新为新值。如果使用
[myProp]=“someValue”
绑定到
@Input()myProp
,则当绑定更新时,
更改(changes)
更改
也包含旧值,但这不适用于您的情况,它仅用于从父级到子级的绑定。在我的情况下,select value已设置,因此
this.oldValue
的值是
未定义的
,因为onModelChange将第一次运行。还有解决方法吗?我在标签中使用了这种比较(参见我编辑的文章)。我想(焦点)已经不相关了。你能用select标记写一个例子吗?