我在 FormGroup 中有一个 FormControl,我可以在其中手动输入一个值,或者它会根据其他值为我计算一个值。我在
ngOnit()
内调用函数,该函数将在某些情况下计算值,并在 FormControl 上调用 setValue()
。
我为我的控件定义了一个最大值,如果通过
setValue()
设置该值,则不会触发该值。计算结果可能会高于最大值。在这种情况下,应该使用最大值。
有没有办法重新触发验证,或者我只是错过了一些东西?我知道我可以在函数内部检查该值是否高于允许的值。我正在寻找更简单的解决方案。我也尝试过在控件上触发
updateValueAndValidity()
但没有任何反应。
<p-inputNumber [formControl]="control"
mode="currency" currency="EUR"
[min]="0" [max]="5000"></p-inputNumber>
验证使您的控件有效或无效。但它不会阻止您使用 JavaScript 更改值本身。你能做的就是阅读
max
。我想出的最简单的解决方案:
this.control.setValue(value);
if (this.control.errors?.['max']) {
this.control.setValue(this.control.errors?.['max'].max);
}
在这种情况下,如果您需要防止双重事件触发,您可能需要使用额外的 setValue 选项。
完成
setValue
后,有时会错过,对于这些场景,您可以使用函数updateValueAndValidity()
,这将确保触发验证器并显示错误。
const control = this.form.get('controlName');
control.setValue(5001);
control.updateValueAndValidity();