在Angular中动态地将控件添加到FormGroup

Posted

技术标签:

【中文标题】在Angular中动态地将控件添加到FormGroup【英文标题】:addControl to FormGroup dynamically in Angular 【发布时间】:2018-05-14 09:39:33 【问题描述】:

如何在 Angular 中动态地将 FormControl 添加到 FormGroup?

例如, 我想添加一个强制控件,名称为“new”,默认值为 ''。

【问题讨论】:

这也有帮助:***.com/questions/55334283/… 就像 Siro 回答了您的问题一样,您可以使用 addControl 方法向表单组添加新的输入。我有一个研究动态形式的小项目。我希望哪个有用。 stackblitz.com/edit/angular-eypxbq?embed=1&file=src/app/… 【参考方案1】:

addControl 是您所需要的。请注意,第二个参数必须是 FormControl 实例,如下所示:

this.testForm.addControl('new', new FormControl('', Validators.required));

如果需要,您还可以使用setValidators 方法动态添加验证器。调用它会覆盖任何现有的同步验证器。

【讨论】:

抱歉,如何包含多个验证器,例如 this.testForm.addControl('new', new FormControl('', [Validators.required, Validators.max(100)]) ; 像魅力一样工作。【参考方案2】:

如果您在表单中使用FormBuilder,您也可以使用它来添加控件:

constructor(private fb: FormBuilder)  
    
method() 
  this.testForm.addControl('new', this.fb.control('', Validators.required));

【讨论】:

在值更改订阅中添加控件时如何停止事件发射?【参考方案3】:

简单使用:

  this.testForm.addControl('new', this.fb.group(
      name: ['', Validators.required]
    ));

【讨论】:

【参考方案4】:
import  FormBuilder, FormControl, FormGroup, Validators  from '@angular/forms';
@Component(
  selector: 'app-component-name',
  templateUrl: './component-name.component.html',
  styleUrls: ['./component-name.component.scss']
)
export class ComponentName implements OnInit 

    formGroup: FormGroup;        
    constructor(private formBuilder: FormBuilder) 

    ngOnInit() 
       this.formGroup = this.formBuilder.group(
        firstName: new FormControl('', Validators.required),
        lastName:  new FormControl('', Validators.required),
      );    
    
    
    // Add single or multiple controls here
    addNewControls(): void 
      this.formGroup = this.formBuilder.group(
         ...this.formGroup.controls,
         email: ['', Validators.required],
         phone: ['', Validators.required]
      );
    

【讨论】:

以上是关于在Angular中动态地将控件添加到FormGroup的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 Form“找不到带有路径的控件”

Ionic3/Angular 错误:必须为表单控件提供一个值,名称为:'jobStatus'

Angular/CSS - 动态添加新元素时动画内容的移动

如何正确地将 Polyfills 添加到 SystemJS Angular 4 应用程序

在 Angular 中,我如何动态地将某些单词包装在另一个 html 元素中?

动态禁用控件时显示警告消息 angular2