文件的多次上传适用于angularjs,但我无法在.then()函数中获取文件名。
这是我的上传文件功能:
$scope.uploadFile = function(files,destinationPhp) {
$scope.montrerLoader = true;
for (var x=0;x<files.length;x++){
var fd = new FormData();
//Take the first selected file
fd.append("file", files[x]);
console.log(files[x].name);
var uploadUrl = destinationPhp;
$http.post(uploadUrl, fd, {
withCredentials: true,
headers: {'Content-Type': undefined },
transformRequest: angular.identity
}).then(function(data){
$scope.montrerLoader = false;
if(data.data.reponse=='ok'){
if(destinationPhp=='uploadFichier.php'){
Notification.success('Fichier transféré!');
$scope.rendezVous.fichiers.push({'nom':files[x].name});
}
}
else{
Notification.error(data.data.reponse);
}
});
}
};
效果很好,文件上传到我的服务器目录,但问题是我需要的这行!:
$scope.rendezVous.fichiers.push({'nom':files[x].name});
我发现了这个错误:
TypeError: files[x] is undefined
我已经尝试了很多,比如尝试将文件名放入TEMP var,它永远不会被识别,或者最终总是推送相同的名称文件(它不是逻辑)。
在上传到$ scope.rendezVous之后,您是否知道如何推送我的文件名?
iller是这一行:
console.log(files[x].name);
在我的firebug控制台中显示权限文件名!!但只要我尝试在里面使用.then(),那它就不起作用了!
答案 0 :(得分:0)
您正在尝试for循环中的异步调用,因此您必须使用IIFE。因此,在IIFE中包含$ http将让它在for循环和放大器的每个i值上运行。文件对象在其回调中不会被定义。检查此样本
for (var index = 1; index <= files.length; index++) {
(function(index) {
$timeout(function() {
console.log("index : "+index);
alert("file name : "+files[index-1].name);
}, index * 500);
})(index);
}
http://plnkr.co/edit/7ZclGB93Soq5Ce8pFmkQ?p=preview
这里我使用$ timeout和&amp;添加了模拟异步调用。然后在内部使用它与IIFE结构循环。您可以在注释掉该异步调用的IIFE包装器时检查您的条件。