简体   繁体   English

如何在 angular 中将项目添加到我的 FormArray?

[英]How can I add items to my FormArray in angular?

I am trying to add some items to my FormArray but I am always get: core.js:6241 ERROR TypeError: Cannot read property 'push' of null.我正在尝试向我的 FormArray 添加一些项目,但我总是得到:core.js:6241 ERROR TypeError: Cannot read property 'push' of null。

I can add itens to the test array using my get answersFormArray() , but I am not able to add into the letter and text form array.我可以使用我的get answersFormArray() 将 itens添加到测试数组中,但我无法添加到字母文本表单数组中。 I tried calling letterFormArray.push(value here) but gives me same error.我尝试调用letterFormArray.push(value here)但给了我同样的错误。

       this.userForm = this.fb.group({
      fname: ['', [Validators.required]],
      lname: ['', [Validators.required]],
      email: ['', [Validators.email, Validators.required]],
      facility: ['', [Validators.required]],
      testCode: ['', [Validators.required]],
      date: [''],
      test: this.fb.group({
        name: [''],
        id: [''],
        position: [''],
        scored: [''],
        wrong: [''],
        duration: [''],
/*         answers: this.fb.array([
          this.fb.group({
            num:'',
            letter: this.fb.array([]),
            text: this.fb.array([]),
            userLetter: this.fb.array([]),
            userText: this.fb.array([]),
          })
        ])
      }), */
        answers: this.fb.group({
          user: this.fb.array([
            this.fb.group({
              num:'',
              letter: this.fb.array([]),
              text: this.fb.array([]),
            })
          ]),
          teste: this.fb.array([
            this.fb.group({
              num:'',
              letter: this.fb.array([]),
              text: this.fb.array([]),
            })])
        })
      })
    })

I am trying to add itens to letter and text FormArray.我正在尝试将 itens 添加到字母文本FormArray。


  get answersFormArray() {
    //return this.userForm.get('test.answers') as FormArray //Option 1
    return this.userForm.get('test.answers.teste') as FormArray
  }

  get letterFormArray() {
    return this.userForm.get('test.answers.teste.letter') as FormArray;
  }
  get textFormArray() {
    return this.userForm.get('test.answers.teste.text') as FormArray;
  }


getTestCorrectAnswers() {
    for(let i = 0; i < this.current_quest.length; i++) {
      const answ = this.fb.group({
        numb: i+1,
        letter: this.fb.array([]),
        text: this.fb.array([])
      })
      for(let z = 0; z < this.current_quest[i].alternatives.length; z++) {
      const alter = this.fb.control("");
        //objective
        if(this.current_quest[i].type === "objective") {
          if(this.current_quest[i].single_or_multi === "single") {
            if(this.current_quest[i].alternatives[z].correct == true) {
              this.textFormArray.push(this.fb.control(this.current_quest[i].alternatives[z].text));
              this.letterFormArray.push(this.fb.control(this.current_quest[i].alternatives[z].letter));
              console.log("Objetiva com uma única alternativa --> " + this.current_quest[i].alternatives[z].text);
            }
          }
          else {
            if(this.current_quest[i].alternatives[z].correct == true) {
              
              console.log("Objetiva com várias alternativas --> " + this.current_quest[i].alternatives[z].text);
            }
          }

        }
        //Subjective
        else {
          if(this.current_quest[i].alternatives.length >= 1) {
            console.log("Subjetiva com chave de resposta --> " + this.current_quest[i].alternatives[z].text);
          }
          else if(!this.current_quest[i].alternatives.length){
            console.log("Subjetiva sem chave de resposta --> ");
          }
        }
        
      }
      this.answersFormArray.push(answ);
    }
  }

This is an example of the object I am creating...这是我正在创建的 object 的示例...

teste: [
        {
          "numb": 1,
          "letter": ["a", "b"],
          "text": ["red", "yellow"]
        },
        {
          "numb": 2,
          "letter": ["a"],
          "text": ["black"]
        }
]

letter and text are FormArray nested into another FormArray. lettertext是 FormArray 嵌套到另一个 FormArray 中的。 As a FormArray is more basically an array, you need to target the index of the FromGroup populated into it.由于 FormArray 基本上是一个数组,因此您需要定位填充到其中的 FromGroup 的索引。

get letterFormArray(index: number) {
    return this.userForm.get('test.answers.teste[index].letter') as FormArray;
  }

André, you generally has安德烈,你通常有

get users()
{
  return this.userForm.get('test.answer.users') as FormArray
}
get teste()
{
  return this.userForm.get('test.answer.teste') as FormArray
}

To reach an element of the FormArray you need an "index", and you can not use a getter, see that is getLetter together, NOT get Letter, see also how we use the getters defined before要到达 FormArray 的元素,您需要一个“索引”,并且您不能使用 getter,请参阅 getLetter 一起,而不是获取 Letter,另请参阅我们如何使用之前定义的 getter

getLetter(index){
    return this.answer.at(index).letter as FormArray
}
getTest(index){
    return this.answer.at(index).test as FormArray
}

Now you can do现在你可以做

  this.getLetter(index.push(...);
  //and
  this.getTest(index.push(...);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在Angular 2中保存FormArray控件? - How can I save my FormArray controls in Angular 2? Angular - 如何在 FormArray 中重新排序项目? - Angular - How to reorder items in FormArray? 如何将formArray添加到formGroup? - How can I add formArray to a formGroup? 在Angular版本4中,如何将ngModel与Formarray选择对象一起使用 - In Angular version 4 how can I use ngModel with Formarray select objects 如何将 FormArray 与 Angular 反应式 forms 的 FormGroups 一起使用? - How can I use FormArray with FormGroups with Angular reactive forms? 我正在使用 FormArray 并且我在另一个控件中有控件但是我如何在角度的嵌套控件中添加元素 - i am using FormArray and i have controls inside another controls but how can i add element in nested controls in angular 在 angular 中,如何将不同的 FormGroup 动态添加到 FormArray 中? - In angular, how to dynamically add different FormGroup into a FormArray? 如何在 FormArray 中添加 Angular Material 自动完成 - How to add Angular Material auto complete in FormArray 如何在现有 formArray 上添加新行? Angular - How to add new row on existing formArray ? Angular 角度虚拟滚动未检测到为反应式 FormArray 添加项目的更改 - Angular Virtual Scroll Not Detecting Changes to Add Items for Reactive FormArray
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM