Angular 角度2更改旧值
有人能告诉我比较新旧价值的最佳做法是什么吗 在第1节中: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
$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标记写一个例子吗?