Datei „file-upload“ erstellen:
import { Component, Output, Input, EventEmitter, ViewChild, ElementRef } from '@angular/core';
@Component({
selector: 'file-upload',
template: `<input #fileInput [hidden]="true" [multiple]="multiple" [accept]="extensions" type="file" (change)="onDialogOk()" />`
})
export class FileUploadComponent {
@Input() multiple: boolean;
@Input() extensions: string;
@Output() onOk = new EventEmitter<FileList>();
@ViewChild('fileInput') fileInput: ElementRef;
click() {
this.fileInput.nativeElement.value = ""
this.fileInput.nativeElement.click();
}
onDialogOk() {
this.onOk.emit((this.fileInput.nativeElement as HTMLInputElement).files);
}
}
Wir integrieren unsere Komponente über file-upload in unserem Template. Da diese hidden ist, definieren wir zusätzlich einen Button, der beim Click unsere Komponente triggern soll. Die Component lässt sich elegant über eine zugewiesene Variable #f ansprechen.
<file-upload #f (onOk)="onFileLoaded($event)"></file-upload>
<button (click)="f.click()">Datei auswählen</button>
Wir implementieren die in dem Template angegebene Funktion onFileLoaded, welche unsere Dateien über den Parameter übergibt.
onFileLoaded($event: FileList) {
console.info($event);
}
Ersteller der Webseite MuchaDev. Selbstständiger IT Constultant für Frontend Technologien.