Skip to content

Commit 76dc105

Browse files
committed
Wait all file for ngChange
1 parent d88b9e3 commit 76dc105

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

src/input-file.component.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,30 @@ class InputFileComponent {
2424
continue;
2525
}
2626

27+
const fileLoaded = files.map(file => new Promise((resolve, reject) => {
2728
const reader = new FileReader();
29+
30+
// See event handlers of `FileReader` here:
31+
// https://developer.mozilla.org/en-US/docs/Web/API/FileReader#Properties
32+
33+
// Catch errors to reject
34+
reader.onabort = reject;
35+
reader.onerror = reject;
36+
2837
// Encapsulatized function for contextualized file + $timeout for proper angularJs refresh
29-
reader.onload = (fileInfo => readerEvent => this.$timeout(() => {
30-
this.ngModel.push({fileName: fileInfo.name, fileInfo, binary: readerEvent.target.result});
38+
reader.onload = (infos => readerEvent => this.$timeout(() => {
39+
const fileLoaded = {infos, file: readerEvent.target.result};
40+
this.ngModel.push(fileLoaded);
41+
resolve(fileLoaded);
3142
}))(file);
3243
reader.readAsDataURL(file);
33-
}
3444

3545
return event;
46+
}));
47+
48+
return Promise.all(fileLoaded).then(response => {
49+
this.ngChange(response);
50+
});
3651
}
3752
}
3853

@@ -42,6 +57,6 @@ angular.module('angularjs-input-file', []).component('inputFile', {
4257
bindings: {
4358
fileType: '@',
4459
ngModel: '=',
45-
onChange: '&' // TODO Check promise.all with loop file
60+
ngChange: '&'
4661
}
4762
});

0 commit comments

Comments
 (0)