【发布时间】:2017-03-29 16:04:19
【问题描述】:
我正在尝试将我的文件在打开后上传到服务器上。我的服务中有一个函数并调用该服务来上传我的文件。这是我的服务功能。
function post(file) {
var file = file;
if (angular.isDefined(file)) {
return Upload.upload({
url: filesConfig.uploadFile,
data: {
file: file
}
}).then(function (response) {
return response;
},
function (error) {
return error;
},
function (evt) {
var progress = parseInt(100.0 * evt.loaded / evt.total);
console.log('progress: ' + progress + '% ' + evt.config.data.file.name);
});
}
}
在最后一个 evt arg 函数中,我在变量方面取得了进展。我正在像这样从控制器调用这个 post 函数。
angular.element(document.querySelector('#fileinput')).on('change', function () {
for (var i = 0; i < this.files.length; i++) {
vm.filess.push(this.files[i]);
fileUpload.post(vm.filess[i]).then(function (response) {
console.log(response);
});
}
});
现在我想检测控制器中每个文件的进度,以在 UI 中显示进度条。如何检测进度?
【问题讨论】:
-
1 - 使用您作为参数发送给
post(file, callback)的回调,然后在每次进度更改时执行回调;或 2 - 每次进度更改时使用 pub/sub 调度事件,然后在控制器中订阅此事件;或 3 - 使用一个调解器/管理器/服务对象来保持对此进度的引用并在每一步更新它,然后将此引用注入您的控制器并使用它;或 4 - 在您的服务中使用进度值(例如file.progress = progress)更新file的参考 - 虽然不太直观 -
你能用代码示例详细说明一下吗?
标签: javascript html angularjs