Angular 2 ngModelChange旧值

Ron*_*ham 12 angular-ngmodel angular2-forms angular

有人可以告诉我比较ngModel旧值和新值的最佳做法是什么?

角度1:

$scope.$watch('someProperty', funciton(oldVal, newVal){
    // code goes here
})
Run Code Online (Sandbox Code Playgroud)

我问这个,因为(ngModelChange)从来没有带给我oldVal,只有newVal.

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

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

Gün*_*uer 15

这可能会奏效

(ngModelChange)="onModelChange(oldVal, $event); oldVal = $event;"
Run Code Online (Sandbox Code Playgroud)

要么

(ngModelChange)="onModelChange($event)"
Run Code Online (Sandbox Code Playgroud)
oldValue:string;
onModelChange(event) {
  if(this.oldValue != event) {
    ...
  }
  this.oldValue = event;
}
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我现在明白了。但是此解决方案似乎是手动操作,您确定这是最佳做法吗?角度2没有传递任何用于获取oldVal的信息? (2认同)

Dis*_*ter 10

只为未来

我们需要观察到 [(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 之前,你会得到 $event 作为新值,但你的模型对象仍然保持以前的值。 如果你把它放在 ngModel 之后,模型就已经有了新的值。

来源


AJT*_*T82 5

输入字段示例...

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

doSomething(oldVal, newVal) {
    // some code
}
Run Code Online (Sandbox Code Playgroud)