首页 > 解决方案 > 角度 6 FormGroup/FormControl 迭代器问题

问题描述

我有一个 fromGroup 和 7 个 FormControl 里面(名称、地址、邮政编码等)当页面初始化时,只有第一个 FormControl 被启用,其他的被禁用。只有在用户输入他的名字后,其他的 FormControls 才应该被启用。我想遍历所有表单控件并在循环中启用每个控件,而无需键入所有表单控件。我想做这样的事情:

for (const field in this.form.controls) { 
   this.form.get(field).enable();
}

或者像这样:

Object.keys( this.form.controls).forEach(key => {
   this.form.controls[key].enable();
});

但不幸的是,其他表单控件从未启用

知道为什么吗?

谢谢你

标签: angularangular6angular-reactive-formsangular-forms

解决方案


您应该排除name在其自身的值更改中修改表单控件subscription。因为这将进行递归调用并给出

超出最大调用堆栈大小

错误。而且你不应该name再次启用控制,因为它已经是enabled.

this.form.get('name').valueChanges.subscribe(inserted => {
      if (inserted.length > 0) { 
        Object.keys(this.form.controls)
        .forEach(key => {
          if(key !== 'name')
          this.form.controls[key].enable()
        });
      }
 });

推荐阅读