Angular 4: свойство "push" и "controls" не существует для типа " AbstractControl"
я реализовал код из этой ссылки http://plnkr.co/edit/yV94ZjypwBgHAlb0RLK2?p=preview но получение push и ошибки управления.
вот что я сделал и не знаю, что с ним не так.
import { Component } from '@angular/core';
import { ViewController,Platform } from 'ionic-angular';
import { FormBuilder,FormGroup,Validators,FormControl,FormArray } from '@angular/forms';
@Component({
selector: 'filter-vendor',
templateUrl: 'filter-vendor.html'
})
export class FilterVendorPage {
questions = [{id:1,text:'Question 1', answers:[{id:1},{id:2}]},{id:2,text:'Question 2', answers:[{id:11},{id:22}]}]
surveyForm:FormGroup;
constructor(
private viewCtrl: ViewController,
private formBuilder:FormBuilder
){
this.surveyForm=this.formBuilder.group({
question:formBuilder.array([])
})
for(var i=0;i<this.questions.length;i++){
let question=formBuilder.group({
question_id:[this.questions[i].id,Validators.required],
answer_id:formBuilder.array([])
});
this.surveyForm.controls['questions'].push(question);
}
}
onChange(id, isChecked, index) {
const answers = <FormArray>this.surveyForm.controls.questions.controls[index].controls.answer_ids
if(isChecked) {
answers.push(new FormControl(id))
} else {
let idx = answers.controls.findIndex(x => x.value == id)
answers.removeAt(idx)
}
}
}
пожалуйста, помогите мне решить эту проблему.Большое спасибо
1 ответов
Typescript жалуется на проверку типа. Вам нужно бросить свой контроль в FormArray
. Так измени
1)
this.surveyForm.controls['questions'].push(question);
to
(<FormArray>this.surveyForm.controls['questions']).push(question);
или
(this.surveyForm.controls['questions'] as FormArray).push(question);
или
(this.surveyForm.get('questions') as FormArray).push(question);
2)
const answers = <FormArray>this.surveyForm.controls.questions.controls[index].controls.answer_ids
to
const answers = this.surveyForm.get(['questions', index, 'answer_ids']) as FormArray;
или
const answers = this.surveyForm.get(`questions.${index}.answer_ids`) as FormArray;