/** * Created by laixiangran on 2016/8/15. * homepage:http://www.laixiangran.cn. */ import { Directive, ElementRef, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core'; @Directive({ selector: '[eNgxFileUpload]', exportAs: 'eNgxFileUpload' }) export class ENgxFileUploadDirective implements OnInit, OnDestroy { private el: HTMLElement; private $el: JQuery; private defaultOpts: any = { language: 'zh', showCaption: false, resizeImage: true, allowedPreviewTypes: ['image', 'html', 'video', 'audio', 'flash'], previewFileIconSettings: { 'doc': '', 'xls': '', 'ppt': '', 'pdf': '', 'zip': '', 'htm': '', 'mov': '', 'mp3': '', 'txt': '', }, previewFileExtSettings: { 'doc': function (ext) { return ext.match(/(doc|docx)$/i); }, 'xls': function (ext) { return ext.match(/(xls|xlsx)$/i); }, 'ppt': function (ext) { return ext.match(/(ppt|pptx)$/i); }, 'zip': function (ext) { return ext.match(/(zip|rar|tar|gzip|gz|7z)$/i); }, 'htm': function (ext) { return ext.match(/(php|js|css|htm|html)$/i); }, 'txt': function (ext) { return ext.match(/(txt|ini|md)$/i); }, 'mov': function (ext) { return ext.match(/(avi|mpg|mkv|mov|mp4|3gp|webm|wmv)$/i); }, 'mp3': function (ext) { return ext.match(/(mp3|wav)$/i); }, } }; @Input('eNgxFileUpload') fileInputOpts: any; @Output() ready: EventEmitter = new EventEmitter(false); @Output() fileuploaded: EventEmitter = new EventEmitter(false); @Output() fileuploaderror: EventEmitter = new EventEmitter(false); @Output() filebatchuploadcomplete: EventEmitter = new EventEmitter(false); @Output() filebatchuploaderror: EventEmitter = new EventEmitter(false); @Output() filebatchuploadsuccess: EventEmitter = new EventEmitter(false); @Output() changes: EventEmitter = new EventEmitter(false); @Output() fileclear: EventEmitter = new EventEmitter(false); @Output() filereset: EventEmitter = new EventEmitter(false); @Output() filepreupload: EventEmitter = new EventEmitter(false); constructor(el: ElementRef) { this.el = el.nativeElement; this.$el = $(this.el); } ngOnInit() { this.$el['fileinput']($.extend(true, {}, this.defaultOpts, this.fileInputOpts)); this.ready.emit(this); this.$el.on('fileuploaded', (event: any, data: any, previewId: any, index: any) => { this.fileuploaded.emit({ event: event, data: data, previewId: previewId, index: index }); }); this.$el.on('fileuploaderror', (event: any, data: any, msg: any) => { this.fileuploaderror.emit({ event: event, data: data, msg: msg }); }); this.$el.on('filebatchuploadcomplete', (event: any, data: any, previewId: any, index: any) => { this.filebatchuploadcomplete.emit({ event: event, data: data, previewId: previewId, index: index }); }); this.$el.on('filebatchuploaderror', (event: any, data: any, msg: any) => { this.filebatchuploaderror.emit({ event: event, data: data, msg: msg }); }); this.$el.on('filebatchuploadsuccess', (event: any, data: any, previewId: any, index: any) => { this.filebatchuploadsuccess.emit({ event: event, data: data, previewId: previewId, index: index }); }); this.$el.on('change', (event: any) => { this.changes.emit(event); }); this.$el.on('fileclear', (event: any) => { this.fileclear.emit(event); }); this.$el.on('filereset', (event: any) => { this.filereset.emit(event); }); this.$el.on('filepreupload', (event: any, data: any, previewId: any, index: any) => { this.filepreupload.emit({ event: event, data: data, previewId: previewId, index: index }); }); } ngOnDestroy() { this.destroy(); } /** * 禁用 */ disable() { this.$el['fileinput']('disable'); } /** * 启用 */ enable() { this.$el['fileinput']('enable'); } /** * 重置 */ reset() { this.$el['fileinput']('reset'); } /** * 刷新 */ refresh() { this.$el['fileinput']('refresh'); } /** * 清空 */ clear() { this.$el['fileinput']('clear'); } /** * 销毁 */ destroy() { this.$el['fileinput']('destroy'); } /** * 上传 */ upload() { this.$el['fileinput']('upload'); } /** * 取消上传 */ cancel() { this.$el['fileinput']('cancel'); } }