Я пытаюсь проверить расширение файла перед использованием ng-upload, но в нормальном состоянии, которое проверяет, является ли файл ошибкой, я пытаюсь добавить свою функцию. Что-то очень странное случается. В первый раз, когда я попытался загрузить, я получил эту ошибку:
ReferenceError: extension_check не определен прикладной 9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 76141 в Object.forEach (прикладной 9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 26353) в Scope $ scope.uploadFiles (прикладной 9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 76140). На $ parseFunctionCall (приложение-9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 38330) при обновлении (приложение-9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 73683) при применении-9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 73695 в прикладном 9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 42205 в completeOutstandingRequest (прикладной 9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 30920) при применении-9d9dfe26d056c7fe9da969ebdf1e1f7f.js: 31300
но во всех других случаях функция вызывает также
Код:
$scope.uploadFiles = function(files) {
$scope.files = files;
angular.forEach(files, function(file) {
if (file && !file.$error && extension_check(file.name)) {
file.upload = Upload.upload({
url: 'http://172.18.139.3:3000/attachments',
file: file
});
file.upload.then(function (response) {
$timeout(function () {
file.result = response.data;
if (file.result.header.status["code"] == "ERROR") {
file.$error = true
$scope.message = file.result.header.status.message
console.log('file ' + file.name + ' is got error . Message: ' + file.result.header.status.message);
}
});
}, function (response) {
if (response.status > 0)
$scope.status.message = response.status + ': ' + response.data;
// $scope.errorMsg = response.status + ': ' + response.data;
});
file.upload.progress(function (evt) {
file.progress = Math.min(100, parseInt(100.0 *
evt.loaded / evt.total));
});
}
console.log(file)
});
extension_check = function(name) {
extension_allow = ['jpg','jpeg','bmp','png'];
ext = name.substr(name.lastIndexOf('.')+1).toLowerCase();
console.log (ext);
flag = (extension_allow.indexOf(ext) > -1);
console.log (flag);
return flag;
}
}
Поскольку в первый раз, когда цикл for выполняется, переменная extension_check
не определена. Во второй раз, поскольку у вас есть extension_check
как глобальная переменная, у него будет ссылка на функцию.
Одним из решений является перемещение объявления extension_check
выше цикла, другое - использование подъема функции с помощью синтаксиса объявления функции
$scope.uploadFiles = function (files) {
$scope.files = files;
angular.forEach(files, function (file) {
if (file && !file.$error && extension_check(file.name)) {
file.upload = Upload.upload({
url: 'http://172.18.139.3:3000/attachments',
file: file
});
file.upload.then(function (response) {
$timeout(function () {
file.result = response.data;
if (file.result.header.status["code"] == "ERROR") {
file.$error = true
$scope.message = file.result.header.status.message
console.log('file ' + file.name + ' is got error . Message: ' + file.result.header.status.message);
}
});
}, function (response) {
if (response.status > 0) $scope.status.message = response.status + ': ' + response.data;
// $scope.errorMsg = response.status + ': ' + response.data;
});
file.upload.progress(function (evt) {
file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
});
}
console.log(file)
});
function extension_check(name) {
var extension_allow = ['jpg', 'jpeg', 'bmp', 'png'];
var ext = name.substr(name.lastIndexOf('.') + 1).toLowerCase();
console.log(ext);
var flag = (extension_allow.indexOf(ext) > -1);
console.log(flag);
return flag;
}
}
Вы также можете определить функцию вне uploadFiles
поскольку она не зависит от каких-либо переменных закрытия
var extension_check = function extension_check(name) {
var extension_allow = ['jpg', 'jpeg', 'bmp', 'png'];
var ext = name.substr(name.lastIndexOf('.') + 1).toLowerCase();
console.log(ext);
var flag = (extension_allow.indexOf(ext) > -1);
console.log(flag);
return flag;
}
$scope.uploadFiles = function (files) {
$scope.files = files;
angular.forEach(files, function (file) {
if (file && !file.$error && extension_check(file.name)) {
file.upload = Upload.upload({
url: 'http://172.18.139.3:3000/attachments',
file: file
});
file.upload.then(function (response) {
$timeout(function () {
file.result = response.data;
if (file.result.header.status["code"] == "ERROR") {
file.$error = true
$scope.message = file.result.header.status.message
console.log('file ' + file.name + ' is got error . Message: ' + file.result.header.status.message);
}
});
}, function (response) {
if (response.status > 0) $scope.status.message = response.status + ': ' + response.data;
// $scope.errorMsg = response.status + ': ' + response.data;
});
file.upload.progress(function (evt) {
file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
});
}
console.log(file)
});
}
Также обратите внимание, чтобы переменная была локальной переменной