2017-09-12 13 views
7

पर मौजूद नहीं है I इस लिंक http://plnkr.co/edit/yV94ZjypwBgHAlb0RLK2?p=preview से कोड लागू किया गया था लेकिन पुश और नियंत्रण त्रुटि प्राप्त हो रही थी।कोणीय 4: संपत्ति "पुश" और "नियंत्रण" प्रकार "AbstractControl"

यहां मैंने जो किया और यह नहीं पता कि इसमें क्या गलत है।

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

} 

कृपया मुझे इस issue.Lot के धन्यवाद

उत्तर

15

टाइपप्रति प्रकार की जाँच पर शिकायत की हल करने में मदद। आपको अपना नियंत्रण FormArray पर डालना होगा। तो

1)

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

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

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

या

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

Forked Plunker

+0

एक बहुत का मेरे दिल के नीचे से धन्यवाद। तुमने मेरी जान बचाई। –

+0

मुझे खोजने में त्रुटि मिल रही है इंडेक्स idx = answer.controls.findIndex (x => x.value == id) answer.removeAt (idx) मुझे नहीं पता कि इसमें क्या गलत है क्योंकि यह प्लंकर में ठीक काम करता है। –

संबंधित मुद्दे