'Angular input file: Selecting the same file
I have the following line in HTML:
<input type="file" #fileInput style="display: none" accept=".xml" (change)="OnFileSelected($event)"/>
Upon selecting a file, the OnFileSelected callback is invoked. But then, if I select the same file again, this callback is not called.
Can you please help?
Solution 1:[1]
onChange
will not detect any change to input type file if the same file has been selected. There are 2 possible ways to make onChange
working on same file selection which I would recommend
Either you need to add an event like
onClick
to clear the value so that the change event will work.<input type="file" #fileInput style="display: none" accept=".xml" (change)="OnFileSelected($event)" (click)="this.value=null"/>
Add
multiple
attribute to the input element
<input type="file" #fileInput style="display: none" accept=".xml" (change)="OnFileSelected($event)" multiple/>
Hope this helps.
EDIT:
As suggested by others in comments, you can achieve it like below
<input type="file" #fileInput style="display: none" accept=".xml" (change)="OnFileSelected($event)" (click)="$event.target.value=null"/>
Solution 2:[2]
Based on Anand's answer I used the following code:
<input type="file" #fileInput style="display: none" accept=".xml" (change)="OnFileSelected($event)" [(ngModel)]="value"/>
In the ts code:
public OnFileSelected (event)
{
let fileList: FileList = event.target.files;
this.value = undefined;
}
Best regards, Zvika
Solution 3:[3]
You can also connect to your input element with a element reference and just set it to null when finished.
@ViewChild('fileInput') fileInput: ElementRef;
this.fileInput.nativeElement.value = null;
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | Zvi Vered |
Solution 3 | Anders Lindin |