Angular 响应式表单:将 .controls 属性 与 formGroupName 一起使用
Angular Reactive Forms: Use .controls property with formGroupName
我很好奇是否可以在 Angular 响应式表单中使用 myForm.controls
属性 而不是为每个实例定义一个 AbstractControl?
NG-Book 中建议使用此方法,但不用于嵌套表单和 FormGroupName。
这是我的代码。
HTML:
<form [formGroup]="myForm"
(ngSubmit)="onSubmit(myForm.value)">
<div>
<input type="text"
id="nameInput"
placeholder="Product"
[formControl]="myForm.controls['name']">
<div *ngIf="myForm.controls['name'].hasError('required')">Name is
required</div>
</div>
<div formGroupName="address">
<input type="text"
id="streetInput"
placeholder="Enter Street"
[formControl]="myForm.controls['street']">
<div *ngIf="myForm.controls['street'].hasError('required')">Street is required</div>
</div>
<button type="submit" class="ui button">Submit</button>
JS:
export class App {
myForm: FormGroup;
constructor(fb: FormBuilder) {
this.myForm = fb.group({
'name': ['', Validators.required],
'address': fb.group({
'street': ['', Validators.required],
});
}
}
}
我知道我可以在输入上设置 formControlName="street"
,但我认为我必须使用 AbstractControl 来确定它的验证状态。在我的非嵌套 formGroup 中,我可以只使用 myForm.controls['name'].hasError('required')
。
我不知道,我很理解你的问题。
是否要对嵌套控件进行验证?
那么,可以得到myForm.get('address').control['street'].hasError('required')
或者myForm.get('address').get('street').hasError('required')
您可以将 hasError('required')
更改为 errors.required
。
这些link是关于表单验证的描述。
https://angular.io/api/forms/FormGroup#example-4
https://angular.io/guide/form-validation#reactive-form-validation
如果我误解了你的问题,请评论。
我很好奇是否可以在 Angular 响应式表单中使用 myForm.controls
属性 而不是为每个实例定义一个 AbstractControl?
NG-Book 中建议使用此方法,但不用于嵌套表单和 FormGroupName。
这是我的代码。
HTML:
<form [formGroup]="myForm"
(ngSubmit)="onSubmit(myForm.value)">
<div>
<input type="text"
id="nameInput"
placeholder="Product"
[formControl]="myForm.controls['name']">
<div *ngIf="myForm.controls['name'].hasError('required')">Name is
required</div>
</div>
<div formGroupName="address">
<input type="text"
id="streetInput"
placeholder="Enter Street"
[formControl]="myForm.controls['street']">
<div *ngIf="myForm.controls['street'].hasError('required')">Street is required</div>
</div>
<button type="submit" class="ui button">Submit</button>
JS:
export class App {
myForm: FormGroup;
constructor(fb: FormBuilder) {
this.myForm = fb.group({
'name': ['', Validators.required],
'address': fb.group({
'street': ['', Validators.required],
});
}
}
}
我知道我可以在输入上设置 formControlName="street"
,但我认为我必须使用 AbstractControl 来确定它的验证状态。在我的非嵌套 formGroup 中,我可以只使用 myForm.controls['name'].hasError('required')
。
我不知道,我很理解你的问题。
是否要对嵌套控件进行验证?
那么,可以得到myForm.get('address').control['street'].hasError('required')
或者myForm.get('address').get('street').hasError('required')
您可以将 hasError('required')
更改为 errors.required
。
这些link是关于表单验证的描述。
https://angular.io/api/forms/FormGroup#example-4
https://angular.io/guide/form-validation#reactive-form-validation
如果我误解了你的问题,请评论。