Angular 4:禁用嵌套表单验证器

时间:2017-11-04 01:42:09

标签: angular typescript

我想禁用“addressLine1”验证器;我怎么能禁用它?看到它嵌套在“地址”元素

 this.form = fb.group({           
            'region': [null, Validators.required],

            'address': fb.group({               
                'addressLine1': ["", Validators.required],
                'addressLine2': [""],
                'city': ["", Validators.required]             
            }),

        })

我在下面尝试了这个但是没有用

 this.form.controls["address"]["addressLine1"] .disable();

谢谢

这是html:

<form [formGroup]="form">

<div ><label><span class="required">*</span>State/Province/Region<br><input class="form-control" pInputText formControlName="addressLine1" [(ngModel)]="selected.address.addressLine1" required></label></div>

</form>

2 个答案:

答案 0 :(得分:5)

正确的语法应该是:

(this.form.controls["address"] as FormGroup).controls["addressLine1"].disable({});

甚至更好

this.form.get('address.addressLine1').disable();

<强> Stackblitz example

<强>更新

要禁用验证器,请使用以下代码:

const control = this.form.get('address.addressLine1');
control.setValidators(null);
control.updateValueAndValidity();

<强> Stackblitz Example

答案 1 :(得分:1)

我们需要将参数传递给disable方法,因为文档告诉我们:

enter image description here

因此,如果您不需要传递任何参数,只需传递一个空对象,代码应如下所示:

this.form.controls["address"]["addressLine1"].disable({});