Angular 如何正确清除ngx材料文件输入,以便在同一文件上载两次时检测更改

Angular 如何正确清除ngx材料文件输入,以便在同一文件上载两次时检测更改,angular,angular-material,Angular,Angular Material,我使用的是角度材质6.4.7和版本0.3.1。在我的一个页面中,我有一个ngx mat文件输入。每次选择文件时,我都会对该文件执行一些操作,然后重置输入。为此,我订阅了与输入相关联的控件的valueChange事件。问题在于,如果同一个文件连续上传两次,那么valueChange事件不会在Chrome和Explorer/Edge中触发(在Firefox中会触发) 我尝试使用以下方法重置输入值: this.form.control['file'].reset(); this.form.contro

我使用的是角度材质6.4.7和版本0.3.1。在我的一个页面中,我有一个ngx mat文件输入。每次选择文件时,我都会对该文件执行一些操作,然后重置输入。为此,我订阅了与输入相关联的控件的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仍然没有检测到更改

以下是我的typescript文件的片段:

this.form=this.fb.group({
文件:[]
})
this.form.controls['file'].valueChanges.subscribe(
文件=>{
如果(文件!=null&&typeof文件!=undefined&&file!=''){
警报(“已更改!”);
this.form.controls['file'].reset();
}
}
)

你可以在这个

中看到它是如何工作的。好的,我想我已经找到了一个适用于所有浏览器的解决方案。我只需获取生成的
元素并重置其值:

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;
    }
  }
)
this.form=this.fb.group({
文件:[]
})
this.form.controls['file'].valueChanges.subscribe(
文件=>{
if(file!=null&&typeof file!=未定义){
警报(“已更改!”);
this.form.controls['file'].setValue(null,{emitEvent:false});
const fileInput=document.querySelector('ngx-mat-file-input[formcontrolname=“file”]input[type=“file”]”);
fileInput.value=null;
}
}
)
这是工作票