angular - 如何在两次上传相同文件时正确清除 ngx-material-file-input 以检测更改
问题描述
我正在使用 Angular Material 6.4.7 和merlosy/ngx-material-file-input版本 0.3.1。在我的一个页面中,我有一个 ngx-mat-file-input。每次选择一个文件时,我都会对文件做一些事情,然后我重置输入。为此,我订阅了与输入关联的控件的 valueChange 事件。问题是,如果同一文件连续上传两次,则 valueChange 事件不会在 Chrome 和 Explorer/Edge 中触发(它在 Firefox 中会触发)。
我尝试使用以下方法重置输入值:
this.form.control['file'].reset();
this.form.control['file'].setValue(null);
this.form.control['file'].setValue('');
this.form.control['file'].setValue([]);
在处理文件后的 valueChange 事件中,但 Chrome 和 Explorer 仍然没有检测到更改。
这是我的打字稿文件的片段:
this.form = this.fb.group({
file: []
})
this.form.controls['file'].valueChanges.subscribe(
file => {
if (file != null && typeof file != undefined && file != '') {
alert('changed!');
this.form.controls['file'].reset();
}
}
)
你可以在这个stackblitz中看到它是如何工作的
解决方案
好的,我想我已经找到了适用于所有浏览器的解决方案。我只需要获取<input>
生成的元素并重置它的值:
this.form = this.fb.group({
file: []
})
this.form.controls['file'].valueChanges.subscribe(
file => {
if (file != null && typeof file != undefined) {
alert('changed!');
this.form.controls['file'].setValue(null, { emitEvent: false });
const fileInput = <HTMLInputElement>document.querySelector('ngx-mat-file-input[formcontrolname="file"] input[type="file"]');
fileInput.value = null;
}
}
)
这是工作中的stackblitz
推荐阅读
- python - 无法打印名称和价格
- android - react-native-iap 中的 Android 收据验证问题
- docker - 来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:370:权限被拒绝:未知
- bash - Bash:通过管道进行进程的相互交互
- javascript - 如何触发块的重新渲染?
- xslt - 如何将 SOAP 标头添加到肥皂消息 - XSLT
- wordpress - WordPress 网站未在 Chrome 桌面版中加载
- flutter - 打开聊天Flutter时如何向下滚动聊天列表视图
- web-scraping - 这在网站的 Robots.txt 页面上是什么意思?
- html - 如何获取已旋转 90 度的文本输入以占据 div 的全高