私の問題を解決するのに役立つ最新のコード
$scope.uploadedFiles = [];
$scope.upload = function(files) {
$scope.uploadedFiles = files;
angular.forEach(files, function(file) {
if (file && !file.$error) {
if($scope.uploadedFiles.indexOf(file) == -1) {
$scope.uploadedFiles.push(file);
}
file.upload = Upload.upload({
url: 'uploader',
file: file,
userId: $scope.user._id
});
file.upload.then(function (response) {
$timeout(function () {
file.result = response.data.id;
});
}, function (response) {
if (response.status > 0)
$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($scope.uploadedFiles);
}
$scope.removeUploadedFile = function(files, idx) {
files.splice(idx, 1);
console.log($scope.uploadedFiles);
$scope.uploadedFiles = files;
console.log($scope.uploadedFiles);
}
.form-group
.btn.btn-default.btn-file
i.fa.fa-paperclip
| Attach Files
input(type='file', ngf-select='upload($files)',accept="text/plain, image/*", ng-model="files", ngf-multiple="true", ngf-max-size='10000000', ngf-keep="true", ngf-keep-distinct="true")
p.help-block Max. 1MB
br
ul#files(ng-repeat="f in files", style='list-style-type: none; padding:0; margin:0;')
li
div
{{f.name}}
.pull-right
{{f.size | bytes}} #[i.fa.fa-close(ng-click="removeUploadedFile(files, $index)")]
div.progress(ng-show="f.progress >= 0")
div(style="width:{{f.progress}}%", ng-bind="f.progress + '%'")
ファイルのアップロードの処理にng-file-uploadを使用しています。コントローラー内のファイルにアクセスできないことを除いて、すべて正常に動作しています。
これが私のコントローラーコードです:
$scope.upload = function(files) {
uploadedFiles = files;
console.log($scope.files);
angular.forEach(files, function(file) {
if (file && !file.$error) {
file.upload = Upload.upload({
url: 'uploader',
file: file,
userId: $scope.user._id
});
file.upload.then(function (response) {
$timeout(function () {
file.result = response.data.id;
});
}, function (response) {
if (response.status > 0)
$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(uploadedFiles);
}
$scope.removeUploadedFile = function(files, idx) {
console.log(files);
files.splice(idx, 1);
uploadedFiles = files;
}
そして私のhtmlコード:
.form-group
.btn.btn-default.btn-file
i.fa.fa-paperclip
| Attach Files
input(type='file', name='attachment', ngf-select='upload($files)',accept="text/plain, image/*", ng-model="files", ngf-multiple="true", ngf-max-size='10000000', ngf-keep="true", ngf-keep-distinct="true")
p.help-block Max. 1MB
br
//- ul(ng-repeat='file in uploadedFiles', style='list-style-type: none; padding:0; margin:0;')
ul#files(ng-repeat='f in files', style='list-style-type: none; padding:0; margin:0;')
li
div
{{f.name}}
.pull-right
{{f.size | bytes}} #[i.fa.fa-close(ng-click="removeUploadedFile(files, $index)")]
div.progress(ng-show="f.progress >= 0")
div(style="width:{{f.progress}}%", ng-bind="f.progress + '%'")
を印刷する$scope.files
と、何も印刷されません。
私が間違っている点を指摘していただければ幸いです。
アップデート:
にアクセスする必要があるのはなぜ$scope.files
ですか? ファイルのアップロード機能は正常に動作していますが、アップロードされたファイル ID をバックエンド システムに渡して、その ID をデータベースに保存する必要があります。$scope
そのためには、更新されたファイルのリストを含む変数が必要です。ユーザーがアップロードされたファイルを削除できるようにしているので、$scope
有効なアップロードされたファイルの最新のリストで変数を更新する必要があります。まだ不明な場合はお知らせください。