如何在我的表单组中定义一个数组并推送数据?

时间:2018-11-08 10:42:44

标签: angular typescript

我具有在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: ''
    });
  }
}

请注意,listaatributos必须是一个数组。

我尝试添加一个将数据推送到此listaatributos数组中的函数:

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

但是我有这个消息:

  

错误TypeError:无法读取未定义的属性'listaatributos'

我的想法是,我有一个反应形式,必须是各种variacoes,并且在variacoes内必须是设置为数组的listaatributos

类似的东西:

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

这是我的variaçãoForm的树形圆顶:

Controls dom Value dom

2 个答案:

答案 0 :(得分:1)

使用this.variacaoForm.controls代替this.variacaoForm.value

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

此致

答案 1 :(得分:0)

对我有用的东西

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