在Ionic 2中,我試圖創建一個動態表單,該表單應顯示一個切換按鈕列表。使用* ngFor迭代包含FormGroups的FormArray
要做到這一點,我試圖用一個FormArray,並且依賴於角DOC和主要基於這此post
,我採取了以下
<form *ngIf="accountForm" [formGroup]="accountForm">
<ion-list>
<!-- Personal info -->
<ion-list-header padding-top>
Informations personnelles
</ion-list-header>
<ion-item>
<ion-label stacked>Prénom</ion-label>
<ion-input formControlName="firstname" [value]="(user | async)?.info.firstname" type="text"></ion-input>
</ion-item>
<!-- Sport info -->
<ion-list-header padding-top>
Mes préférences sportives
</ion-list-header>
<ion-list formArrayName="sports">
<ion-item *ngFor="let sport of accountForm.controls.sports.controls; let i = index" [formGroupName]="i">
<ion-label>{{sport.name | hashtag}}</ion-label>
<ion-toggle formControlName="{{sport.name}}"></ion-toggle>
</ion-item>
</ion-list>
</ion-list>
</form>
控制器
ionViewDidLoad() {
console.log('MyAccountPage#ionViewDidLoad');
// Retrieve the whole sport list
this.sportList$ = this.dbService.getSportList();
this.sportList$.subscribe(list => {
// Build form
let sportFormArr: FormArray = new FormArray([]);
for (let i=0; i < list.length; i++) {
let fg = new FormGroup({});
fg.addControl(list[i].id, new FormControl(false));
sportFormArr.push(fg);
}
this.accountForm = this.formBuilder.group({
firstname: ['', Validators.compose([Validators.maxLength(30), Validators.pattern('[a-zA-Z ]*'), Validators.required])],
lastname: ['', Validators.compose([Validators.maxLength(30), Validators.pattern('[a-zA-Z ]*'), Validators.required])],
company: [''],
sports: sportFormArr
});
console.log('form ', this.accountForm);
})
}
但我得到以下錯誤:
ERROR Error: Cannot find control with path: 'sports -> 0 -> '
任何想法爲什麼?
你在實驗值在這條線上行事? 'formControlName = 「{{sport.name}}」'。我敢打賭,錯誤在於此。 – developer033
錯誤依然存在,現在是「運動 - > 0 - > 0」,因爲我等於索引。我需要顯示控件的名稱,它的名字是動態的,應該是在sport.name –
你真的很希望體育運動中的formgroups看起來像嗎?我的意思是像物體是怎樣的? – Alex