Angular 2+ (ngModelChange) 自身输入

Angular 2+ (ngModelChange) on input on itself

我有数字输入字段,我想限制它,所以最大值为 100。所以当用户按数字输入数字时,我希望它实时受到限制。为此,我使用 (ngModelChange).

示例:

这是html代码:

<!-- NOT WORKING -->
<input type="number"
       class="form-control"
       maxlength="3"
       [(ngModel)]="period"
       (ngModelChange)="onValueChange()"
       id="period" placeholder="0" min="0"
       max="100" step="1" name="period">

<!-- WORKING -->
<p>{{period}}</p>

控制器:

  public period: number;

  onValueChange() {
     if (this.period > 100) this.period = 100;
  }

这将更新周期,但只会更新一次。如果我继续输入更多数字,它不会更新输入字段。另外 maxlength="3" 不工作

我尝试了相同的概念,但在段落上,它正在工作。可能问题只在输入字段上。

改用FormControlvalidators

<input class="form-control" 
        type="number" 
        min="0" 
        max="100" 
        placeholder="0" 
        [(ngModel)]="period" 
        name="period" 
        [formControl]="period">

this.period= new FormControl("", [Validators.max(100)]);

尝试使用 (input) 代替 (ngModelChange) :

(input)="onValueChange($event)"

在您的 ts 代码中将是:

onValueChange(event): void {
  console.log(event);
  let p = event.target.value;
  if (p > 100) this.period = 100;
}

由于您在 ngModelChange 中更新模型值,模型值与视图值不同步。尝试在 settimeout 中异步更新模型值。

onValueChange() {
    setTimeout(()=>{
      if (this.period > 100) this.period = 100;
    })
  }