Angular 5 - 如何在表单值更改上添加条件字段

时间:2018-02-11 06:50:02

标签: angular angular-reactive-forms

我正致力于应用条件场逻辑。两个字段取决于它们的值。

要求: 我们说,我们有一个带有以下值的单选按钮:

  

是否要格式化此代码: o是o否

如果用户选择,否,没有任何反应。如果用户选择“是”,则会有另一个字段为:

  

选择格式类型: o HTML o PHP o Javascript

我使用https://toddmotto.com/angular-dynamic-components-forms方式生成表单,我们将设置传递给FormGroup并生成表单。

我试过的方式:

this.form.valueChanges
.subscribe(values => {
    if(value['require_formatting'] === 'yes') {
        this.form.addControl('formatting_type', myFormControl); // Add new form control
    }
});

不幸的是,这给了我"最大调用堆栈大小超出错误。当我在添加表单控件之前添加setTimeout时,它运行良好,但是控制台会因无数次不必要的调用而变得混乱。

1 个答案:

答案 0 :(得分:2)

尝试将代码更改为以下内容:

this.form.valueChanges
.subscribe(values => {
    if(value['require_formatting'] === 'yes' && this.form.get('formatting_type')) {
        this.form.addControl('formatting_type', myFormControl); // Add new form control
    }
});

只需在if语句中运行一次就可以消除堆栈溢出。

问题是if语句中的代码在无限循环中调用了observable的下一个函数。这样它将运行有限次数。