2017-04-16 45 views
1

我在角度2项目中使用Reactive窗体模式。我想用答案动态地填充容器(答案对象是使用http调用获取并填充的)。angular 2 NgFor只支持绑定到Iterables,如数组

活性形式的对象结构:

public questionDetailForm = this.fb.group({ 
    type : ['', Validators.required], 
    title : ['', Validators.required], 
    required: [false], 
    answers : this.fb.array([]) 
}); 

辅助数组填充的答案' 'questionDetailForm' 对象的键:

public formArray = <FormArray>this.questionDetailForm.controls['answers']; 

'formArray' 由HTTP调用响应数据填充:

if (response.data.question.answers != null && response.data.question.type_id !== 400 && response.data.question.type_id !== 800) { 
    for (const key in response.data.question.answers) { 
     if (response.data.question.answers.hasOwnProperty(key)) { 
      this.formArray.push(new FormControl(response.data.question.answers[key] , Validators.required)); 
     } 
    } 
} 

问题出现在html文件中(以粗体突出显示):

<div fxLayout="row" fxFlexOffset="10" *ngFor="let answer of **questionDetailForm.controls['answers'];** let i = index" class="base-input-container answer-container"> 
    <md-input-container fxFlex="70" [ngClass]="{haserror: formErrors.answer && i === answerIndexError}"> 
     <input mdInput type="text" [formControl]="answer" placeholder="Answer"> 
    </md-input-container> 
    <button type="button" fxFlexOffset="3" class="remove-answer" md-fab mdTooltip="remove answer" (click)="removeAnswer(i)" color="primary"><i class="material-icons">remove</i></button> 
</div> 

我刚刚从angular-cli beta版本更新到1.0.0。我还没有使用测试版面临同样的问题。

回答

2

可以遍历一个FormArray尝试:

questionDetailForm.get('answers') 

或者:

questionDetailForm.controls['answers'].controls 
+0

非常感谢......还担任questionDetailForm.controls.answers.controls – tsiro

+0

当我建项目生产我得到'属性'控件'不存在类型'AbstractControl'' – tsiro

+0

使用.get(),应该工作。 – unitario

相关问题