typescript Angular formarray push formgroup

wz8daaqr  于 7个月前  发布在  TypeScript
关注(0)|答案(5)|浏览(90)

显示错误“TypeError:control.setParent不是一个函数”每次尝试这样做时.目标是得到答案('odgovori' FormArray),但不是在输入上循环,而是在单选按钮组中.

console.log(this.odgovorForm.value)

字符串
一切正常,但当推然后显示错误

get odgovori() {
    return this.pitanjeForm.get('odgovori') as FormArray;
  }

 pitanjeForm = this.fb.group({
    data: ['', [Validators.required]],
    odgovori: this.fb.array([]),
    tacan: ['', [Validators.required]]
  });

  odgovorForm = this.fb.group({
    data: ['', [Validators.required]],
    color: 'danger'
  });

  addAnswer(): void {
    console.log(this.pitanjeForm.value, this.odgovorForm.value);
    this.info = this.odgovorForm.value;
    this.odgovori.push(this.info);
  }


HTML

<form [formGroup]="pitanjeForm">
 <div>
   <input formControlName="data">
 </div>
  <form [formGroup]="odgovorForm">
    <input formControlName="data">
    <button (click)="addAnswer()"></button>
  </form>
 <div *ngFor="let odgovor of odgovor.value; index as i">
   <input type="radio" value="{{ i }}"> 0 - 30<br>
 </div>
</form>

y53ybaqx

y53ybaqx1#

哦...我的错

addAnswer(): void {
 this.odgovori.push(this.odgovorForm)
}

字符串

要推送FormGroup以形成数组,请始终推送整个FormGroup,而不仅仅是值或控件!

x33g5p2x

x33g5p2x2#

用下面的代码替换你的代码

public odgovori = this.pitanjeForm.controls['odgovori'];

 pitanjeForm = this.fb.group({
    data: ['', [Validators.required]],
    odgovori: this.fb.array([]),
    tacan: ['', [Validators.required]]
  });

  odgovorForm = this.fb.group({
    data: ['', [Validators.required]],
    color: 'danger'
  });

  addAnswer(): void {
    console.log(this.pitanjeForm.value, this.odgovorForm.value);
    this.info = this.odgovorForm.value;
    this.odgovori.push(this.info);
    console.log(this.odgovori)
  }

字符串

slwdgvem

slwdgvem3#

我把我的代码一样,尔阿卜杜勒梅曼,但我得到 * 属性推不存在类型 * 错误。


的数据

这为我工作:

import { OnInit } from "@angular/core";
import { FormBuilder,Validators } from "@angular/forms";

export class YourClass implements OnInit {
  pitanjeForm = this.fb.group({
    articulo_alquiler: this.fb.array([]),
  });

  odgovorForm = this.fb.group({
    name: [null],
    quantity: [0, Validators.compose([Validators.required, Validators.min(0)])],
    total: 0,
  });

  constructor(private fb: FormBuilder) {}

  get articulo_alquiler() {
    return this.pitanjeForm.get("articulo_alquiler") as FormArray;
  }

  addArticulo(): void {        
    this.articulo_alquiler.push(this.odgovorForm);
    // console.log(this.articulo_alquiler);
    // console.log(this.pitanjeForm.value.articulo_alquiler);
  }
}

字符串

jbose2ul

jbose2ul4#

尝试使用public odgovori = this.pitanjeForm.get('odgovori')作为FormArray。然后angular知道它是一个数组,你可以向它推送一些东西。

zu0ti5jz

zu0ti5jz5#

对于Angular 8

这对我很有效

get formData() {
  return this.formData.get("names") as FormArray;
}

updateFormDataNames(newValue: any[]) {
  // Clear existing form array
  while (this.formDataNames.length !== 0) {
   this.formDataNames.removeAt(0);
  }

  // Populate the form array with new values
  newValue.forEach((item) => {
    this.nxpEntryFormEntries.push(new FormControl(item));
  });
}

字符串
现在您可以轻松地将一个新数组传递给updateFormDataNames(“1”,“2”])

相关问题