2017-11-04 46 views
2

我想禁用“addressLine1”验证器;我如何禁用它?它看到的是嵌套在 “地址” 元素Angular 4:禁用嵌套表单验证器

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

正确的语法应为:

(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

+0

他们禁用了整个字段,而不是仅禁用验证器检查 – BadGuyKUTA

+0

当你调用'disable'方法时,你期望什么? – yurzui

+0

我希望它只是禁用该字段的验证程序,所以我可以保存表单而无需在该字段中输入 – BadGuyKUTA

1

我们需要将参数传递给disable方法,如文档所述:

enter image description here

所以,如果你不需要传递任何参数,只是传递一个空的对象,代码应该是这样的:

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

@BadGuyKUTA,你没忘了加上'[formGroup] =“form”到你的'form'元素和'formControlName =“addressLine1”'(addressL的例子ine1控制)在你的'输入'? –

+0

我刚刚编辑原始文章,并添加了它已经formControl的HTML,因为已经 – BadGuyKUTA

+0

@BadGuyKUTA,和窗体标签看起来像这样:'

'? –