代码之家  ›  专栏  ›  技术社区  ›  Craig

我应该如何基于窗体的当前值将条件验证逻辑应用于反应窗体?

  •  0
  • Craig  · 技术社区  · 5 年前

    this.form.controls[keyOf<IBranchForm>('vatNo')].valueChanges
                    .subscribe(change => {
                        this.setOrRemoveValidators(this.form);
                    });
    
    private setOrRemoveValidators(form: FormGroup): void {
        const vatNoIsRequired = true;
        if (vatNoIsRequired) {
            form.controls['vatNo'].setValidators(Validators.required);
        }
        else {
            form.controls['vatNo'].setValidators([]);
        }
    
        form.controls['vatNo'].updateValueAndValidity();
    }
    

    我面临的问题是,我需要更新表单值和有效性,以便添加或删除UI中显示的错误,但这当然会导致subscribe再次运行,我们进入一个无限循环。

    我现在觉得,基于值更改来更改表单值或有效性的方法可能不是正确的方法,因为在解决问题时会遇到麻烦(emitEvent:false也不会导致UI更新)。

    0 回复  |  直到 5 年前
    推荐文章