Angular 2 ngModelChange old value

后端 未结 3 1801
野的像风
野的像风 2020-12-11 01:56

Can someone please tell me what is the best practice for comparing ngModel old and new value?

In angular 1:

$scope.$watch(\'someProperty\', funciton(         


        
相关标签:
3条回答
  • 2020-12-11 02:29

    Example with input field...

    <div *ngFor="let value of values">{{value}}
        <input [(ngModel)]="value" (focus)="old=value" (ngModelchange)="doSomething(old, value)">
    </div>
    
    doSomething(oldVal, newVal) {
        // some code
    }
    
    0 讨论(0)
  • 2020-12-11 02:30

    This might work

    (ngModelChange)="onModelChange(oldVal, $event); oldVal = $event;"
    

    or

    (ngModelChange)="onModelChange($event)"
    
    oldValue:string;
    onModelChange(event) {
      if(this.oldValue != event) {
        ...
      }
      this.oldValue = event;
    }
    
    0 讨论(0)
  • 2020-12-11 02:45

    Just for the future

    we need to observe that [(ngModel)]="hero.name" is just a short-cut that can be de-sugared to: [ngModel]="hero.name" (ngModelChange)="hero.name = $event".

    So if we de-sugar code we would end up with:

    <select (ngModelChange)="onModelChange()" [ngModel]="hero.name" (ngModelChange)="hero.name = $event">

    or

    <[ngModel]="hero.name" (ngModelChange)="hero.name = $event" select (ngModelChange)="onModelChange()">

    If you inspect the above code you will notice that we end up with 2 ngModelChange events and those need to be executed in some order.

    Summing up: If you place ngModelChange before ngModel, you get the $event as the new value, but your model object still holds previous value. If you place it after ngModel, the model will already have the new value.

    SOURCE

    0 讨论(0)
提交回复
热议问题