美好的一天,
如何在formControl中处理输入类型文件?即时通讯使用反应形式,但当我得到我的表格的价值时,它会在我的<input type="file">
??
答案 0 :(得分:10)
您需要自己编写FileInputValueAccessor
。这是the plunker和代码:
@Directive({
selector: 'input[type=file]',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: FileValueAccessorDirective,
multi: true
}
]
})
export class FileValueAccessorDirective implements ControlValueAccessor {
onChange;
@HostListener('change', ['$event.target.value']) _handleInput(event) {
this.onChange(event);
}
constructor(private element: ElementRef, private render: Renderer2) { }
writeValue(value: any) {
const normalizedValue = value == null ? '' : value;
this.render.setProperty(this.element.nativeElement, 'value', normalizedValue);
}
registerOnChange(fn) { this.onChange = fn; }
registerOnTouched(fn: any) { }
nOnDestroy() { }
}
然后你就能得到这样的更新:
@Component({
moduleId: module.id,
selector: 'my-app',
template: `
<h1>Hello {{name}}</h1>
<h3>File path is: {{path}}</h3>
<input type="file" [formControl]="ctrl">
`
})
export class AppComponent {
name = 'Angular';
path = '';
ctrl = new FormControl('');
ngOnInit() {
this.ctrl.valueChanges.subscribe((v) => {
this.path = v;
});
}
}
答案 1 :(得分:0)
无法在角度形式控制中处理此问题。
如果你想上传图片,我们可以提供一些破解工作。
只需添加<input type=file>
作为表单控件,用户可以在其中添加文件,然后获取文件,我们可以将其更改为base64code,然后将该值分配给主表单的隐藏字段。
然后我们就可以这样存储图像文件。
否则你可以去ng-file-upload模块ng file upload