@@ -13,17 +13,17 @@ class InputFileComponent {
1313 if ( this . $attrs . multiple !== 'false' && ( this . $attrs . multiple === '' || this . $attrs . multiple ) ) {
1414 inputElement . setAttribute ( 'multiple' , '' ) ;
1515 }
16- inputElement . addEventListener ( 'change' , this . onInputChange , false ) ;
16+ inputElement . addEventListener ( 'change' , event => this . onInputChange ( event ) , false ) ;
1717 }
1818
1919 onInputChange ( event ) {
20- const files = event . target . files ;
21- if ( this . ngModel ) {
22- this . ngModel . length = 0 ;
23- } else {
24- this . ngModel = [ ] ;
25- }
26- const fileLoaded = files . map ( file => new Promise ( ( resolve , reject ) => {
20+ const inputFiles = event . target . files ;
21+ const files = [ ] ;
22+ const fileLoaded = [ ... inputFiles ] . map ( inputFile => new Promise ( ( resolve , reject ) => {
23+ if ( ! this . fileFormat ) {
24+ resolve ( inputFile ) ;
25+ return ;
26+ }
2727 const reader = new FileReader ( ) ;
2828
2929 // See event handlers of `FileReader` here:
@@ -33,28 +33,40 @@ class InputFileComponent {
3333 reader . onabort = reject ;
3434 reader . onerror = reject ;
3535
36+ console . log ( inputFile ) ;
37+
3638 // Encapsulatized function for contextualized file + $timeout for proper angularJs refresh
3739 reader . onload = ( infos => readerEvent => this . $timeout ( ( ) => {
38- const fileLoaded = { infos, file : readerEvent . target . result } ;
39- this . ngModel . push ( fileLoaded ) ;
40+ const fileLoaded = {
41+ infos,
42+ file : readerEvent . target . result
43+ } ;
44+ files . push ( fileLoaded ) ;
4045 resolve ( fileLoaded ) ;
41- } ) ) ( file ) ;
46+ } ) ) ( {
47+ name : inputFile . name ,
48+ size : inputFile . size ,
49+ type : inputFile . type ,
50+ lastModified : inputFile . lastModified
51+ } ) ;
4252
4353 switch ( this . fileFormat ) {
4454 case 'Text' :
45- reader . readAsText ( file ) ;
55+ reader . readAsText ( inputFile ) ;
4656 break ;
4757 case 'Base64' :
48- reader . readAsDataURL ( file ) ;
58+ reader . readAsDataURL ( inputFile ) ;
4959 break ;
5060 case 'ArrayBuffer' :
5161 default :
52- reader . readAsArrayBuffer ( file ) ;
62+ reader . readAsArrayBuffer ( inputFile ) ;
5363 }
5464 } ) ) ;
5565
5666 return Promise . all ( fileLoaded ) . then ( response => {
57- this . ngChange ( response ) ;
67+ if ( this . filesLoaded ) {
68+ this . filesLoaded ( response ) ;
69+ }
5870 } ) ;
5971 }
6072}
@@ -66,7 +78,6 @@ angular.module('angularjs-input-file', []).component('inputFile', {
6678 accept : '@' ,
6779 fileFormat : '@' ,
6880 fileType : '@' ,
69- ngModel : '=' ,
70- ngChange : '&'
81+ filesLoaded : '<'
7182 }
7283} ) ;
0 commit comments