当我尝试上传图像时,我收到了问题标题中的错误消息:
这是我的模板
<input type="file" formControlName="avatar" accept=".jpg, .jpeg .svg"
#fileInput (change)="uploadImage($event)" />
<div class="avatar-preview">
<ng-template #selectedImage>
<div style.backgroundImage="{{'url('+ imageUrl +')'}}"></div>
</ng-template>
</div>
<button (click)="fileInput.click()"></button>
这是我的组件ts
@ViewChild('fileInput') el: ElementRef;
imageUrl: string = "";
this.profileForm = new FormGroup({
avatar: new FormControl(null)
});
public uploadImage(event) {
let reader = new FileReader();
let file = event.target.files[0];
if (event.target.files && event.target.files[0]) {
reader.readAsDataURL(file);
reader.onload = () => {
this.imageUrl = reader.result as string;
this.profileForm.patchValue({
avatar: reader.result
});
}
}
this.cd.markForCheck();
}
1条答案
按热度按时间ozxc1zmp1#
Angular不包含用于文件输入的
ControlValueAccessor
。这意味着它正在使用FormControl中定义的DefaultValueAccessor
,该DefaultValueAccessor
尝试将avatar
的值写入控件。FileInputControl不允许这样做。或者您应该实现一个,然后可以删除
uploadImage
函数,因为它将被移动到ControlValueAccessor
。或者删除
formControlName="avatar"
,并且不要使用React形式,因为无论如何您都要自己处理事件。示例(未测试,您可能需要将其设置为组件或更改选择器,因为这可能与
DefaultValueAccessor
选择器冲突):可选地,你也可以将你当前的处理添加到这个指令中(而不是调用
this.onChange(file);
)。