反应形式的验证器不从父表单组件传递到子组件
Validators for reactive form not passing from parent form component to child component
我有一个正在使用子表单组件的父表单组件。我正在使用 Angular 反应形式。我在子表单组件中设置值没有问题,但验证器不再工作。在父窗体中,我实例化了类似如下的窗体组:
this.editUserForm = this.fb.group ({
phone: ['123-456-1234'],
fax: [null],
email: [null],
website: [null],
editUserForm_Address : this.fb.group ({
address1: ['123 Elm Street', Validators.required],
address2: [null],
city: ['Dummy City', Validators.required],
state: ['Dummy State', Validators.required],
zipcode: ['11111', Validators.required],
country: ['USA', Validators.required]
})
});
父组件html使用子组件:
<form [formGroup] = "editUserForm">
<address-form formGroupName = "editUserForm_Address"></address-form>
</form>
子组件class是这样的:
export class AddressFormComponent implements OnInit {
public addressFormGroup: FormGroup;
@Input()
constructor(private controlContainer: ControlContainer) { }
ngOnInit() {
this.addressFormGroup = <FormGroup>this.controlContainer.control;
}
}
子组件html是这样的(以Address 1为例):
<ng-container [formGroup] = "addressFormGroup">
<div class = "row">
<div class = "form-group col-12" [ngClass]="{'error': (addressFormGroup.controls['address1'].errors)">
<label for="street" >Address 1*</label>
<input placeholder = "Address 1" class="form-control" formControlName="address1">
<div *ngIf="(addressFormGroup.controls['address1'].errors)" class="error-msg">
<div [hidden]="!addressFormGroup.controls['address1'].errors.required"
class = "input_feedback">Address 1 is required.</div>
</div>
</div>
我对显示的值没有任何问题,例如地址 1 的“榆树街 123 号”。然而,当一切都在父表单中时,验证器不再像以前那样工作。我也尝试过使用 setValidators() 方法设置验证器,但没有成功。
我不确定确切的问题是什么,但我能够在 StackBlitz 上重新创建您的表单并且验证按预期工作。
我所做的只是将 editUserForm_Address
formGroup
传递给子组件。
这里正在工作 StackBlitz -> https://stackblitz.com/edit/angular-pbfuut
<form [formGroup] = "editUserForm">
<address-form [formGroup]="editUserForm.get('editUserForm_Address')"></address-form>
</form>
关键是将实际的 formGroup
传递给子组件 -> [formGroup]="editUserForm.get('editUserForm_Address')"
我有一个正在使用子表单组件的父表单组件。我正在使用 Angular 反应形式。我在子表单组件中设置值没有问题,但验证器不再工作。在父窗体中,我实例化了类似如下的窗体组:
this.editUserForm = this.fb.group ({
phone: ['123-456-1234'],
fax: [null],
email: [null],
website: [null],
editUserForm_Address : this.fb.group ({
address1: ['123 Elm Street', Validators.required],
address2: [null],
city: ['Dummy City', Validators.required],
state: ['Dummy State', Validators.required],
zipcode: ['11111', Validators.required],
country: ['USA', Validators.required]
})
});
父组件html使用子组件:
<form [formGroup] = "editUserForm">
<address-form formGroupName = "editUserForm_Address"></address-form>
</form>
子组件class是这样的:
export class AddressFormComponent implements OnInit {
public addressFormGroup: FormGroup;
@Input()
constructor(private controlContainer: ControlContainer) { }
ngOnInit() {
this.addressFormGroup = <FormGroup>this.controlContainer.control;
}
}
子组件html是这样的(以Address 1为例):
<ng-container [formGroup] = "addressFormGroup">
<div class = "row">
<div class = "form-group col-12" [ngClass]="{'error': (addressFormGroup.controls['address1'].errors)">
<label for="street" >Address 1*</label>
<input placeholder = "Address 1" class="form-control" formControlName="address1">
<div *ngIf="(addressFormGroup.controls['address1'].errors)" class="error-msg">
<div [hidden]="!addressFormGroup.controls['address1'].errors.required"
class = "input_feedback">Address 1 is required.</div>
</div>
</div>
我对显示的值没有任何问题,例如地址 1 的“榆树街 123 号”。然而,当一切都在父表单中时,验证器不再像以前那样工作。我也尝试过使用 setValidators() 方法设置验证器,但没有成功。
我不确定确切的问题是什么,但我能够在 StackBlitz 上重新创建您的表单并且验证按预期工作。
我所做的只是将 editUserForm_Address
formGroup
传递给子组件。
这里正在工作 StackBlitz -> https://stackblitz.com/edit/angular-pbfuut
<form [formGroup] = "editUserForm">
<address-form [formGroup]="editUserForm.get('editUserForm_Address')"></address-form>
</form>
关键是将实际的 formGroup
传递给子组件 -> [formGroup]="editUserForm.get('editUserForm_Address')"