错误TypeError:value.forEach不是函数

时间:2019-02-05 14:33:53

标签: javascript angular typescript angular6

我需要使用FormArray从6号角创建一个更新。

我在void Start() { StartCoroutine(ShootRoutine); } IEnumerator ShootRoutine() { while (true) // newer exit this loop { if (!Input.GetButton ("Fire1")) yield return null; //not shooting, do nothing else { if (ammo>0) { Shoot(); // move your ammo decrease here yield return new WaitForSeconds(delayBetweenShots); // cooldown after shot } if (ammo<=0) { DisableEffects(); Reload(); yield return new WaitForSeconds(reloadTime); EnableEffects(); } } } // while(true) loops back here } 中使用此代码:

editfrom.TS

我在HTML中使用它:

  valueIngrident=new FormArray([]);

    constructor(private brandService:BrandService,private PValueInfoService:ProductinfovalueService,private productinfoService:ProductinfoService,private catService:CategoryService,private produSrvice:ProductService, private route:ActivatedRoute,private fb:FormBuilder) {
    this.id= + this.route.snapshot.paramMap.get('id');
    this.productVM=this.produSrvice.InitialProduct();

   }

  ngOnInit() {

    this.InitialForm()
    this.GetMainCat();
    }

  InitialForm(){
    this.editFG=this.fb.group({
      productTitle:['',Validators.compose([Validators.required])],
      productName:['',Validators.compose([Validators.required])],
      color:['',Validators.compose([Validators.required])],
      productImageName:['',Validators.compose([Validators.required])],
      price:['',Validators.compose([Validators.required])],
      gurantyMonth:['',Validators.compose([Validators.required])],
      gurantyCompanyName:['',Validators.compose([Validators.required])],
      catId:['',Validators.compose([Validators.required])],
      brandId:['',Validators.compose([Validators.required])],
      values:this.valueIngrident
    })
    this.GetProductByID(this.id)
  }

  public GetProductByID(id:number){
    this.produSrvice.GetProductDetailById(id).subscribe((data)=>{
      this.productVM=data
      this.SelectBrand=data.brandId
      this.SelectCat=data.catId
      this.PName=this.productVM.productName
      this.editFG.setValue({
        productTitle:[data.productTitle],
        productName:[data.productName],
        color:[data.color],
        productImageName:[data.productImageName],
        price:[data.price],
        gurantyMonth:[data.gurantyMonth],
        gurantyCompanyName:[data.gurantyCompanyName],
        catId:[data.catId],
        brandId:[data.brandId],
        values:this.valueIngrident
      })
      this.ChangeFormByType(data.catId)
  })
  }

  get ValueFormControl(){
    return  this.editFG.get('values') as FormArray;
}

  public CreateValueFiled(PD:Productinfovalue[]){
    for(let element of PD )
    {
      this.valueIngrident.push(
        new FormGroup({
          infoId:new FormControl(element.infoId),
          value:new FormControl(element.value)
        })
      )
    }
}

  public ChangeFormByType(id:number){
    this.ChangeBrand(id)
      this.PValueInfoService.GetAllInfoValueForUpdate(id).subscribe(
        res=>{
          this.PD=res,
          this.CreateValueFiled(this.PD)
        }
      )
  }

但是在页面加载时会显示此错误:

  

错误TypeError:value.forEach不是一个函数       在FormArray.push ../ node_modules/@angular/forms/fesm5/forms.js.FormArray.setValue(forms.js:3545)

出什么问题了?

1 个答案:

答案 0 :(得分:1)

FormArray具有功能setValue。第一个参数应该是一个数组。您正在发送对象。

查看函数GetProductByID(id:number)的中间部分 在这里,您致电this.editFG.setValue({...})

From the official documentation

  

setValue(value:any [],options:{onlySelf ?: boolean; glowEvent ?:   布尔值} = {}):void参数value any []的值数组   控件

     

options对象配置确定控制方式的选项   值更改后传播更改并发出事件

     

onlySelf:为true时,每次更改只会影响此控件,而不会影响   它的父母。默认为false。 glowEvent:为true或不提供时   (默认设置),同时显示statusChanges和valueChanges   当控制值为时发出具有最新状态和值的事件   更新。如果为false,则不会发出任何事件。配置选项   传递给updateValueAndValidity方法。可选的。默认是   {}。

     

返回无效

您的参数包含在{}中,这使它成为一个对象。函数规范说它必须是一个数组。

setValue函数在数组上调用forEach,而对象没有forEach,这就是为什么它说value.forEach不是函数的原因。