Angular 2:如何在不中断验证的情况下修改ngModelChange中的值?

maf*_*maf 6 validation angular

我用输入创建了自己的数字微调器组件实现:

<span ...>
<input 
    type="text" 
    class="form-control ui-spinner-input" 
    #spinnerModel="ngModel" 
    [ngModel]="parameter.value" 
    (ngModelChange)="onNgModelChange($event)"
    [spinnerValidator]="parameter" 
/>
<button ...
Run Code Online (Sandbox Code Playgroud)

我想在某些情况下修改输入值,例如,用户输入的值超过最大限制,我想将值设置为允许的最大值.当我在onNgModelChange中执行此操作时,验证存在问题.

例如,最大值为100,但用户输入150,这是发生的情况:

  • 使用参数150调用onNgModelChange
  • 在onNgModelChange里面我将模型的值更改为100
  • 对值100触发验证,该值有效
  • 在onNgModelChange完成后,触发值150的验证并将输入呈现为无效,尽管在模型和输入中已经有值100,这是有效的

如何正确修改该值?

编辑

有一个验证的解决方法:

    onNgModelChange(newObj: any) {
        ...
        setTimeout(() => {
            this.spinnerModel.control.setValue(numericValue, {onlySelf: false, emitEvent: true, emitModelToViewChange: true, emitViewToModelChange: false});
        }, 0);
        ...
    }
Run Code Online (Sandbox Code Playgroud)

其中numericValue是应该应用的篡改值.尽管GUI中存在一个小问题,因为首先处理无效值,并且GUI会在几分之一秒内注意到它,然后应用新的/有效值.