ngFileModel-directive.js 1.81 KB
angular.module('focaDirectivas')
    .directive('ngFileModel', ['$parse', function ($parse) {
        return {
            restrict: 'A',
            link: function (scope, element, attrs) {
                var model = $parse(attrs.ngFileModel);
                var isMultiple = attrs.multiple;
                var modelSetter = model.assign;
                element.bind('change', function () {
                    var promesas = [];
                    angular.forEach(element[0].files, function (item) {
                        promesas.push(new Promise(function(resolve, reject) {
                            var reader = new FileReader();
                            reader.readAsDataURL(item);
                            reader.onload = function(){
                                var value = {
                                    name: item.name,
                                    url: URL.createObjectURL(item),
                                    size: item.size,
                                    base64: reader.result,
                                    _file: item
                                };
                                resolve(value);
                            };
                            reader.onerror = function (error) {
                               reject(error);
                            };
                        }));
                    });

                    Promise.all(promesas).then(function(values){
                        scope.$apply(function () {
                            if (isMultiple) {
                                modelSetter(scope, values);
                            } else {
                                modelSetter(scope, values[0]);
                            }
                        });
                    });
                });
            }
        };
    }]);