veroneseComS
veroneseComS

Reputation: 768

How can I define an array inside my formgroup and push data?

I have this function that create my formgroup in my ngOnInit:

ngOnInit() {

    //When start component create my form group
    this.variacaoForm = this.fb.group({

      variacoes: this.fb.array([this.createFormGroup()])

    });


 createFormGroup(): FormGroup {
    return this.fb.group({
      atributo: "",
      preco: null,
      listaatributos: [],
      sku: '',
      tipo: '',
      id: '',
      id_produto: '',
      estoque_variacao: 0,
      linkfotovariacao: '',
      created_at: '',
      foto_prin_1: '',
      foto_prin_2: '',
      foto_prin_3: '',
      foto_prin_4: '',
      foto_prin_5: '',
      foto_prin_6: ''
    });
  }
}

Note that listaatributos must be an array.

I try add one function that push data in this listaatributos array:

adicionaAtributo(index: number) {          
  this.variacaoForm.value.variacoes[index].listaatributos.push(this.idAtributo);
}

But i have this message:

ERROR TypeError: Cannot read property 'listaatributos' of undefined

My idea is that i have a reactive form that must be various variacoes and inside the variacoes must be a listaatributos set as array.

Something like:

variações: [{"estoque_variacao": 900, "atributos":[12,13]}]

This is the tree dom of my variaçãoForm:

Controls dom Value dom

Upvotes: 0

Views: 45

Answers (2)

veroneseComS
veroneseComS

Reputation: 768

What worked for me:

 adicionaAtributo(index: number){ //Adiciona atributo no form group
    this.listAtributos.push({id:this.idAtributo, tipovariacao: this.variacaoForm.value.variacoes[index].tipo, valorvariacao: this.variacaoForm.value.variacoes[index].atributo})
    const control = (<FormArray>this.variacaoForm.controls['variacoes']).at(index);
    control.patchValue({listaatributos: this.listAtributos});

Upvotes: 0

Mohamed Ali RACHID
Mohamed Ali RACHID

Reputation: 3297

Use this.variacaoForm.controls instead of this.variacaoForm.value :

adicionaAtributo(index: number) {          
  (<FormGroup>(<FormArray>this.variacaoForm.controls['variacoes']).controls[index]).controls['listaatributos'].push(this.idAtributo);
}

Regards,

Upvotes: 1

Related Questions