import { Directive, EventEmitter, HostListener, Output } from '@angular/core'; @Directive({ selector: '[DragAndDrop]' }) export class DragAndDropDirective { @Output() private fileDropEmitter: EventEmitter = new EventEmitter(); @HostListener('drop', ['$event']) onDrop(e: DragEvent) { e.preventDefault(); e.stopPropagation(); const files = e.dataTransfer.files; if (files.length > 0) { this.fileDropEmitter.emit(files); } } @HostListener('dragover', ['$event']) onDragOver(e: DragEvent) { e.preventDefault(); e.stopPropagation(); e.dataTransfer.dropEffect = 'copy'; } }