代码之家  ›  专栏  ›  技术社区  ›  Suraj Bahadur

角度4:AbstractControl类型上不存在属性“push”和“controls”

  •  14
  • Suraj Bahadur  · 技术社区  · 9 年前

    我是从这个链接实现代码的 http://plnkr.co/edit/yV94ZjypwBgHAlb0RLK2?p=preview

    以下是我所做的,我不知道这有什么问题。

    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 回复  |  直到 9 年前
        1
  •  41
  •   yurzui    9 年前

    FormArray . 所以改变

    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

    推荐文章