javascript - 使用 FormControl 订阅输入类型文件更改?
问题描述
当我订阅一个FormControl.valueChanges()
由在一个文件上选择一个文件触发的时,input
发出的值不包含所选文件的完整路径。是否可以通过订阅获取此信息,或者我们是否必须直接将其从元素中提取出来@ViewChild
才能直接访问该元素?设置如下所示:
<input #file name='file' id='file' type='file' [formControl]='loadButton'/>
它的订阅是这样的:
this.loadButton.valueChanges
.pipe(untilDestroyed(this))
.subscribe(path => {
console.dir(path);
});
}
选择文件后,记录的语句如下所示:
C:\fakepath\test.png
解决方案
在我的项目中,我在一个组件中完成了它,例如:
import { Component, EventEmitter, Output } from '@angular/core';
@Component({
selector: 'app-image-uploader',
template: '<input type="file" (change)="onUploadFileChanged($event)" />',
})
export class ImageUploaderComponent implements OnInit {
@Output() uploadStatusChange = new EventEmitter<any>();
onUploadFileChanged(event) {
this.targetElement = event.target;
if (event.target.files && event.target.files[0]) {
component.uploadStatusChange.emit('ready');
}
}
}
现在,选择文件后,组件会告诉父组件我准备好了,然后您可以将 fromControl 补丁设置为 true。父组件的 HTML 就像上面例子中的 $event 等于字符串 'ready':
<app-image-uploader (uploadStatusChange)="yourFunction($event)"></app-image-uploader>
对于图像,您也可以在上传前使用 FileReader 显示它。
推荐阅读
- javascript - 使函数使用对象作为其作用域
- machine-learning - 当有多个正确标签时,如何训练机器学习分类模型?
- javascript - 在 Grunt Build 工具缩小并连接到一个文件后手动替换 HTML 脚本标签?
- vba - 代码独立工作,但不作为整个程序的一部分
- excel - Excel:从另一个工作表中的值过滤工作表
- django - Django-allauth - 如何启用对不同帐户使用相同的电子邮件地址
- c# - using 语句在 bin 目录 DLL 中找不到命名空间
- java - 在 v26 之前的 API 级别上的 SparkJava
- java - 带有缩进的 UTF-8 字符的 printf
- javascript - 当模式处于活动状态时,传单地图仍然存在。为什么?