Angular 4: "push" and "controls" properties do not exist in the "AbstractControl" type

I implemented the code from this link http://plnkr.co/edit/yV94ZjypwBgHAlb0RLK2?p=preview , but received a push and manages the error.

That's what I did and I don’t know what is wrong with him.

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) } } } 

Please help me solve this problem. Not thank

+7
angular typescript
source share
1 answer

Typescript complains about type checking. You need to do your control before FormArray . Therefore change

one)

 this.surveyForm.controls['questions'].push(question); 

to

 (<FormArray>this.surveyForm.controls['questions']).push(question); 

or

 (this.surveyForm.controls['questions'] as FormArray).push(question); 

or

 (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; 

or

 const answers = this.surveyForm.get(`questions.${index}.answer_ids`) as FormArray; 

Forked plunker

+15
source share

All Articles