本文介绍了Form数组长度不会通过Form.Reset()重置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在研究角度表单数据驱动方法,我将表单控件动态添加到Form数组中,我使用form.Reset()来重置添加的控件,但Form.Reset()不重置Form数组长度,我发现这是一个已知的问题,可以使用这种方法解决,https://github.com/angular/angular/pull/11051,但我仍然不清楚这一点。请帮帮忙,谢谢
reviewForm: FormGroup;
ngOnInit(){
this.reviewForm = new FormGroup({
'controlArray': new FormArray([
])
});
}
onSubmit(){
this.formData = new FormData(this.formService.formName, this.reviewForm.value.controlArray);
let formControls = JSON.stringify(this.formData);
// console.log(formControls);
this.formService.createForm(formControls)
.subscribe(
data => console.log(data),
error => console.error(error)
);
this.reviewForm.reset();
}
推荐答案
向FormArray
添加控件的唯一方法是通过组件代码文件(类型脚本)动态添加。这意味着您将动态更新DOM
。因此,对FormArray
调用reset
只会清除动态添加的控件的值(将控件设置为其初始状态)。例如,输入框的空字符串)。另一方面,重置FromArray
的长度需要删除FormArray
中的所有控件。因此,在这种情况下,您必须将FormArray
控件本身设置为空FormArray
。考虑以下示例,该示例通过将FormArray
替换为空的FormArray
实例来删除FormArray
的所有控件this.reviewForm.setControl('controlArray', new FormArray([]));
在使用FormBuilder实例时,您可以执行以下操作
this.reviewForm.setControl('controlArray', this.fb.array([])); // here, `fb` is a form builder instance
这篇关于Form数组长度不会通过Form.Reset()重置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!