ngModel не всегда обновляет ввод текста

#angular #typescript #angular-ngmodel #angular-ngmodelchange

Вопрос:

Я работаю над сценарием, в котором я хочу ngModel получить обновление на основе определенных условий

Шаблон:

 <mat-form-field>
    <mat-label>val:</mat-label>
    <input matInput [(ngModel)]="someVal" (ngModelChange)="onChange($event)">
</mat-form-field>
 

Компонент:

 someVal: number = 10;
onChange(val: number):void {
  if(val > 10){
    this.someVal = 0;
  }
}
 

При первой попытке изменить значение на значение, превышающее 10, представление обновляется. Но последующие изменения этого не делают. Что вызывает такое поведение и как его обойти?

Ответ №1:

Не делай этого …

 [(ngModel)]="someVal" (ngModelChange)="onChange($event)"
 

сделай это …

 [ngModel]="someVal" (ngModelChange)="onChange($event)"

onChange(val: number):void {
  if(val > 10) val = 0;
  this.someVal = val;
}
 

Комментарии:

1. Это не имело никакого значения. Значение по-прежнему не отображается 0 после второй попытки.

Ответ №2:

Добавьте свойство name.

 <input matInput name="val" [(ngModel)]="someVal" (ngModelChange)="onChange($event)">
 

Ответ №3:

В качестве обходного пути я сделал это сейчас.

 private _cdRef: ChangeDetectorRef

public someVal: number = 10;
onChange(val: number):void {
  if(val > 10){
    this.someVal = null;
    this._cdRef.detectChanges();
    this.someVal = 0;
  }
}