Primeng:使用 setValue() 时,分配给 p-inputNumber 的 FormControl 会忽略 [max]-属性

问题描述 投票:0回答:2

我在 FormGroup 中有一个 FormControl,我可以在其中手动输入一个值,或者它会根据其他值为我计算一个值。我在

ngOnit()
内调用函数,该函数将在某些情况下计算值,并在 FormControl 上调用
setValue()

我为我的控件定义了一个最大值,如果通过

setValue()
设置该值,则不会触发该值。计算结果可能会高于最大值。在这种情况下,应该使用最大值。

有没有办法重新触发验证,或者我只是错过了一些东西?我知道我可以在函数内部检查该值是否高于允许的值。我正在寻找更简单的解决方案。我也尝试过在控件上触发

updateValueAndValidity()
但没有任何反应。

<p-inputNumber [formControl]="control"
               mode="currency" currency="EUR"
               [min]="0" [max]="5000"></p-inputNumber>
angular primeng
2个回答
0
投票

验证使您的控件有效或无效。但它不会阻止您使用 JavaScript 更改值本身。你能做的就是阅读

max
。我想出的最简单的解决方案:

this.control.setValue(value);
if (this.control.errors?.['max']) {
  this.control.setValue(this.control.errors?.['max'].max);
}

在这种情况下,如果您需要防止双重事件触发,您可能需要使用额外的 setValue 选项。


0
投票

完成

setValue
后,有时会错过,对于这些场景,您可以使用函数
updateValueAndValidity()
,这将确保触发验证器并显示错误。

const control = this.form.get('controlName');
control.setValue(5001);
control.updateValueAndValidity();
© www.soinside.com 2019 - 2024. All rights reserved.