2017-09-12 9 views
7

Został zaimplementowany kod z tego linku http://plnkr.co/edit/yV94ZjypwBgHAlb0RLK2?p=preview, ale otrzymuję komunikat push i kontroluje błąd.Kątowy 4: Właściwość "wypychanie" i "sterowanie" nie istnieje w przypadku typu "AbstractControl"

Oto co zrobiłem i nie wiem, co jest z nim nie tak.

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

} 

Proszę mi pomóc rozwiązać ten issue.Lot dnia dzięki

Odpowiedz

15

Typescript zarzuca od typu kontroli. Musisz rzucić kontrolę pod numerem FormArray. Tak zmienić

1)

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

do

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

lub

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

lub

(this.surveyForm.get('questions') as FormArray).push(question); 

2)

const answers = <FormArray>this.surveyForm.controls.questions.controls[index].controls.answer_ids 

do

const answers = this.surveyForm.get(['questions', index, 'answer_ids']) as FormArray; 

lub

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

Forked Plunker

+0

Wiele z dnia dziękuję z głębi serca. Uratowałeś mi życie. –

+0

Otrzymuję błąd w findIndex niech idx = answers.controls.findIndex (x => x.value == id) odpowiedzi.removeAt (idx) Nie wiem, co jest z nim nie tak, jak to działa dobrze w plunker. –

Powiązane problemy