我在将动态验证器添加到表单字段时遇到问题。 因此,仅当其中之一具有价值时,我才需要对字段进行验证。因此,如果用户在这三个字段中的任何一个字段中输入值,则应在所有字段上触发requiredIf验证器,但是我有:
错误RangeError:超出了最大调用堆栈大小
但是,如果我不使用updateValueAndValidity(),它将不会应用我在setValidators()中设置的验证器;
此问题是否有解决方案,代码如下:
ngOnInit(): void {
...
this.mainForm.get('CargoWidth').setValidators([requiredIf(this.f['CargoLength']), requiredIf(this.f['CargoHeight'])]);
this.mainForm.get('CargoLength').setValidators([requiredIf(this.f['CargoWidth']), requiredIf(this.f['CargoHeight'])]);
this.mainForm.get('CargoHeight').setValidators([requiredIf(this.f['CargoLength']), requiredIf(this.f['CargoWidth'])]);
this.onApplyValidators();
}
onApplyValidators() {
this.f['CargoLength'].valueChanges
.subscribe(value => {
if (value === undefined)
return;
this.f['CargoWidth'].updateValueAndValidity();
this.f['CargoHeight'].updateValueAndValidity();
});
this.f['CargoWidth'].valueChanges
.subscribe(value => {
if (value === undefined)
return;
this.f['CargoLength'].updateValueAndValidity();
this.f['CargoHeight'].updateValueAndValidity();
});
this.f['CargoHeight'].valueChanges
.subscribe(value => {
if (value === undefined)
return;
this.f['CargoWidth'].updateValueAndValidity();
this.f['CargoLength'].updateValueAndValidity();
});
}