Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度4:setValue formBuilder空数组_Javascript_Angular_Typescript_Angular2 Formbuilder - Fatal编程技术网

Javascript 角度4:setValue formBuilder空数组

Javascript 角度4:setValue formBuilder空数组,javascript,angular,typescript,angular2-formbuilder,Javascript,Angular,Typescript,Angular2 Formbuilder,我有这样的反应形式: constructor(...){ this.form = this.formBuilder.group({ name: ['', Validators.compose([Validators.required, Validators.maxLength(50)])], memes: this.formBuilder.array([ this.initMemes('TrollFace') ]) }); } initMemes (

我有这样的反应形式:

constructor(...){
  this.form = this.formBuilder.group({
    name: ['', Validators.compose([Validators.required, Validators.maxLength(50)])],
    memes: this.formBuilder.array([
      this.initMemes('TrollFace')
    ])
  });
}

initMemes (name?) {
  return this.formBuilder.group({
    id: [''], name: [name]
  });
}
稍后我可以添加更多的
模因

addMemes () {
  const control = <FormArray>this.form.controls['memes'];
  control.push(this.initMemes('anyName'));
}
addMemes(){
const control=this.form.controls['memes'];
control.push(this.initMemes('anyName'));
}
然后,如果我得到表单值,我得到:

this.form.controls['memes'].value
-这里是数组

但是有一种情况,当我需要this
this.form.controls['memes'].value
设置为空数组时,怎么办

如果我这样设置:

this.form.controls['memes'].setValue([])

我收到错误:
必须在索引0处为表单控件提供一个值。

我做错了什么?

编辑:

从较新版本开始,Angular现在支持使用
clear()
清除
FormArray


如果有更好的方法,我愿意听取建议!:)

试试
this.myForm.controls['myFormArray']=this.formBuilder.array([])

我遇到了一个类似的问题,在更新表单后,我会遇到上述错误,经过一系列调查和失败的实验后,我发现
this.myForm.updateValue和validity
最终成功了。

表单

this.form = this._formB.group({
    blocks: this._formB.array([])
});
第一种方法

let fArray = <FormArray>this.form.controls['blocks'];
while (fArray.length !== 0) {
  fArray.removeAt(0)
}
this.form.setControl('blocks', this._formB.array([]));

请为您的答案添加一些解释,这有助于OP以及其他可能在搜索类似问题时出现在这里的人。我认为应该是control.controls.removeAt(i)。因为console.log(control)有一个名为controls的数组,否则会出现错误“无法读取null的属性'enabled'。谢谢。这是整个页面中唯一有效的解决方案。您可以只执行
control.clear()
,而不是
for loop
。对于阅读本文的任何人:在阅读了有关FormArray的教程后,我遇到了这个错误。解决方案很简单,只需使用一对空方括号[]初始化FormArray:this.formBuilder.array([])。我不知道那里的函数调用应该做什么,我只知道它给出了那个错误。我们仍然这样做,这样做会使父窗体无效,如果formArray在像这样清除它之前有一个无效的控件。Ng的最佳方法
let fArray = <FormArray>this.form.controls['blocks'];
while (fArray.length !== 0) {
  fArray.removeAt(0)
}
this.form.setControl('blocks', this._formB.array([]));