我对AngularJS很新,我需要实现一个多文件上传器。
我使用danialfarid/angular-file-upload并且上传效果很好。但是,在使用当前上传进度更新$ scope.selectedFiles时,我遇到了问题。
以下是我的代码片段:
angular.module('myApp', ['angularFileUpload', 'ui.bootstrap']);
var MyCtrl = [ '$scope', '$upload', function($scope, $upload) {
// ...
// This array store multiple files the user wants to upload
$scope.selectedFiles = [];
// Here the upload happens
$scope.uploadFiles = function() {
var files = $scope.selectedFiles;
for (var i = 0; i < files.length; i++) {
var file = files[i].fileObject;
$upload.upload({
//...
}).progress(function(evt) {
// p === current progress, this is working fine
var p = parseInt(100.0 * evt.loaded / evt.total));
// HERE IS THE ISSUE
// $scope.selectedFiles === undefined
// I need to find out a way to update $scope.selectedFiles[i].progres with the current progress....
var p = parseInt(100.0 * evt.loaded / evt.total);
console.log('$scope.selectedFiles: ' + $scope.selectedFiles); //[object Object]
console.log('$scope.selectedFiles[i]: ' + $scope.selectedFiles[i]); //undefined
console.log('$scope.selectedFiles[i].progress: ' + $scope.selectedFiles[i].progress); //Error: $scope.selectedFiles[i] is undefined
$scope.selectedFiles[i].progress = p;
})
// ...
任何帮助?
由于
答案 0 :(得分:1)
$scope.selectedFiles
真的是undefined
吗?看起来可能是使用循环变量i
导致$scope.selectedFiles[i]
未定义。在您遇到问题时,i
为files.length
,当用作索引时,它超出了数组的范围。
尝试将上传文件代码提取到函数中,以便它对循环中的变量形成一个正确的闭包...
$scope.uploadFiles = function() {
var files = $scope.selectedFiles;
for (var i = 0; i < files.length; i++) {
uploadFile(files[i]);
// ...
function uploadFile (selectedFile) {
var file = selectedFile.fileObject;
$upload.upload({
//...
}).progress(function(evt) {
var p = parseInt(100.0 * evt.loaded / evt.total));
selectedFile.progress = p;
});
}