Я использую эту директиву для загрузки файлов.У файла есть метка, которая идет долго с ним.У меня есть функция, которую я вызываю перед попыткой загрузки, и если эта функция возвращает false, то я не хочу выполнять загрузку, потому что пользователь не указал значение метки.
Проблема, кажется, заключается в том, что я просто возвращаюсь из обратного вызова element.on ('change'), который никогда больше не вызывается.Когда я возвращаю $ .ajax (), когда все работает, element.on ('change') запускается столько раз, сколько я хочу.Поэтому я не уверен, почему простой вызов return останавливает element.on ('change') для запуска в будущих попытках загрузки.
angular.module('ngSimpleUpload', [])
.directive('ngSimpleUpload', ['$http', function ($http) {
return {
scope: {
webApiUrl: '@',
callbackFn: '=',
errorFn: '=',
preFn: '=',
selectedFileFn: '=',
additionalData: '=',
buttonId: '@'
},
link: function (scope, element, attrs) {
// original code, trigger upload on change
element.on('change', function (evt) {
var files = evt.__files_ || (evt.target && evt.target.files);
Upload(files);
});
function Upload(files) {
// can bail out of the entire call if preupload returns false
if (scope.preFn(scope.additionalData) == false) {
return;
}
var fd = new FormData();
angular.forEach(files, function (v, k) {
fd.append('file', files[k]);
scope.selectedFileFn(files[k].name);
});
return $.ajax({
type: 'POST',
url: scope.$eval(scope.webApiUrl),
data: fd,
async: true,
cache: false,
contentType: false,
processData: false
}).done(function (d) {
// callback function in the controller
scope.callbackFn(d, scope.additionalData);
}).fail(function (x) {
// callback function in the controller
scope.errorFn(x);
});
}
}
}
}]);