javascript - ReactiveForms:输入类型“文件”由 addControl() 重置
问题描述
在 Angular 7 和 ReactiveForm 中,如果我将文件放入 中<input type="file">
,然后添加一行formgroup.addControl()
,则所有内容<input type="file">
都将重置。
我被卡住了,因为type="file"
不能再用个人功能初始化,因为它们必须用字符串空值初始化。
Stackblitz:https ://stackblitz.com/edit/angular-yvk6nb
type="file"
当我使用 addControl 添加行时,我需要保留这些值
解决方案
您的表单结构已关闭。如果您要放入<pre>{{formgroup.value | json}}</pre>
stackblitz,您会发现结构不正确并导致您出现问题。
这似乎是对 a 的完美使用FormArray
,所以这就是我的建议:
myForm: FormGroup;
constructor(private formBuilder: FormBuilder) { }
ngOnInit() {
// wrap the formarray inside a formgroup
this.myForm = this.formBuilder.group({
files: this.formBuilder.array([
this.initRow()
])
})
}
// called when adding a new row
addRow() {
(<FormArray>this.myForm.get('files')).push(this.initRow());
}
// creates and returns a new formgroup
initRow() {
const blanckForm = this.formBuilder.group({
name: [''],
file: ''
});
return blanckForm;
}
你的模板看起来像:
<form [formGroup]="myForm">
<div formArrayName="files">
<div *ngFor="let file of myForm.get('files').controls; let i = index" [formGroupName]="i">
<input formControlName="name" type="text">
<input formControlName="file" type="file">
</div>
</div>
</form>
<input type="button" (click)="addRow()" value="ADD ROW">
你的分叉STACKBLITZ
推荐阅读
- javascript - 这是什么功能模式?如果有的话?
- apache-spark - 如何从 Spark DataFrame 中获取非空排序的升序数据?
- javascript - 让谷歌表格在多列中自动更新时间有点麻烦
- sql - 我可以使用文件 .asp 执行此操作吗?
- reactjs - 使用 -p 标志时出现 webpack 错误
- sql - 如何在Oracle中多次更新与另一个表连接的表?
- python - 如何找到正值最接近零的熊猫记录?
- xaml - 资源字典:System.InvalidCastException
- c# - 我想将一个特定列从我的 DataGrid 导出到 Excel
- mysql - MySQL NOT IN 查询给出错误结果