动态验证程序上具有updateValueAndValidity的循环依赖性

时间:2019-04-08 18:19:07

标签: angular

我在将动态验证器添加到表单字段时遇到问题。 因此,仅当其中之一具有价值时,我才需要对字段进行验证。因此,如果用户在这三个字段中的任何一个字段中输入值,则应在所有字段上触发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();
        });
}

0 个答案:

没有答案