我需要使用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)
出什么问题了?
答案 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不是函数的原因。