在Ionic2
/ Angular2
中,我很难让FormGroup
和FormGroupName
使用嵌套Components
,不断收到错误。< / p>
Cannot find control with path: 'location -> latitude'
Form
页面呈现动态的字段列表。
<form [formGroup]="formGroup" (ngSubmit)="postForm()">
<ion-list>
<ion-item *ngFor="let field of fields">
<field-location [field]="field" [formGroup]="formGroup" *ngIf="field.input == 'location'"></field-location>
<!-- OTHER FIELD TYPES HERE -->
</ion-item>
</ion-list>
</form>
Form
课程会在FormGroup
中创建FormControl
和ionViewDidLoad
个项目。
this.formGroup = new FormGroup({});
for (let index in this.fields) {
let field = this.fields[index];
if (field.input == 'location') {
this.formGroup.addControl(field.key, new FormGroup({
latitude: new FormControl(''),
longitude: new FormControl('')}));
}
else {
this.formGroup.addControl(attribute.key, new FormControl(''));
}
}
Location
类将field
和formGroup
定义为输入。
@Component({
selector: 'field-location',
templateUrl: 'location.html',
inputs: ['field', 'formGroup']
})
export class LocationComponent {
field: any = {};
formGroup: FormGroup;
constructor() {
}
}
Location
视图将FormGroup
视为Input
,并使用字段Key
作为formGroupName
。
<ion-item [formGroup]="formGroup" *ngIf="formGroup">
<ion-label>{{field.label}}</ion-label>
<div [formGroupName]="field.key">
<ion-input type="text" hidden [formControlName]="latitude"></ion-input>
<ion-input type="text" hidden [formControlName]="longitude"></ion-input>
</div>
</ion-item>
如何让formGroupName
在嵌套Components
中工作?您还需要从父级传递嵌套的FormGroup
吗?
答案 0 :(得分:0)
好的,我发现了这个问题,所以分享解决方案以防万一。
看起来这个问题与[formControlName]="latitude"
上的绑定有关。
<ion-item [formGroup]="formGroup" *ngIf="formGroup">
<ion-label>{{field.label}}</ion-label>
<div [formGroupName]="field.key">
<ion-input type="text" hidden [formControlName]="latitude"></ion-input>
<ion-input type="text" hidden [formControlName]="longitude"></ion-input>
</div>
</ion-item>
但它应该是formControlName="latitude"
。
<ion-item [formGroup]="formGroup" *ngIf="formGroup">
<ion-label>{{field.label}}</ion-label>
<div [formGroupName]="field.key">
<ion-input type="text" hidden formControlName="latitude"></ion-input>
<ion-input type="text" hidden formControlName="longitude"></ion-input>
</div>
</ion-item>
进行此更改后,嵌套的Component
按预期工作。希望这有助于其他人!