FormArray验证中的Angular2 FormGroup

Posted

技术标签:

【中文标题】FormArray验证中的Angular2 FormGroup【英文标题】:Angular2 FormGroup in FormArray validation 【发布时间】:2017-11-09 23:54:02 【问题描述】:

我有以下型号:

export interface Content 
  lang: string;
  title: string;

我需要验证这个contents FormArrayparent FormGroup

this.formBuilder.group(
  defaultLang: ['', Validators.required],
  contents: this.formBuilder.array([], Validators.minLength(1))
);

对于我的contents FormArray 中的每个Content,我使用以下content FormGroup 验证模型:

this.formBuilder.group(
  lang: ['', Validators.required],
  title: ['', Validators.required]
);

现在,我将以下content FormGroup 添加到我的contents FormArray 以验证每个Content

(<FormArray>parentFormGroup.controls['contents'])
    .push(this.contentFormGroup);

但使用这种方法我无法验证这些规则:

如果 Content 字段之一已填满,则会进行内容验证(这意味着将 content FormGroup 添加到 contents FormArray) 如果没有填写任何内容字段,则不会进行内容验证(这意味着删除 contents FormArraycontent FormGroup 如果存在) 如果Contentlangparent FormGroupdefaultLang,则该内容为必填项。

问题

是否有解决方法可以仅使用验证器添加/删除contents FormArraycontent FormGroup

有没有办法只使用 Angular 原生验证器?

我需要创建自定义验证器吗?如果是,你有没有很好的例子来说明FormArray

【问题讨论】:

你能创建一个 plunker 吗?我在拼凑这段代码时遇到了一些麻烦? :) 【参考方案1】:

您可以像下面这样将验证器添加到组中

 this.group = this.formBuilder.group(
        lang: ['', Validators.required],
        title: ['', Validators.required]
    );

    this.group.setValidators([          
        this.titleRequiredValidator(),
    ]);



    private titleRequiredValidator(): ValidatorFn 
        return (group: FormGroup):  [key: string]: any  => 
        const langControl = group.controls.lang;
        const titleControl = group.controls.title;

        if (langControl.value !== '' && titleControl.value == '')) 
            const error =  required: true ;
            titleControl.setErrors(error);
            return error;
                    
        else 
            titleControl.setErrors(null);
            return null;
        
    ;

【讨论】:

以上是关于FormArray验证中的Angular2 FormGroup的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2+ 材料 mat-chip-list formArray 验证

Angular 2:从 FormArray 访问数据

设置初始值Angular 2反应formarray

在 Angular 2+ 中对 FormArray 对象进行排序的理想方法是啥?

formArray的角异步自定义验证器

迭代 Angular 2+ FormArray