我正致力于应用条件场逻辑。两个字段取决于它们的值。
要求: 我们说,我们有一个带有以下值的单选按钮:
是否要格式化此代码: 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时,它运行良好,但是控制台会因无数次不必要的调用而变得混乱。
答案 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的下一个函数。这样它将运行有限次数。