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

时间:2017-11-27 11:27:44

标签: angular validation

我已经使用input:

创建了自己的数字微调器组件实现
<span ...>
<input 
    type="text" 
    class="form-control ui-spinner-input" 
    #spinnerModel="ngModel" 
    [ngModel]="parameter.value" 
    (ngModelChange)="onNgModelChange($event)"
    [spinnerValidator]="parameter" 
/>
<button ...

我想在某些情况下修改输入值,例如,用户输入超过最大限制的值,我想将值设置为允许的最大值。当我在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);
        ...
    }

其中numericValue是应该应用的篡改值。 虽然GUI中存在一个小故障,因为首先处理无效值,GUI会在几分之一秒内注意到它,然后应用新的/有效值。

0 个答案:

没有答案