现在,Angular 1.5.4最终允许您跟踪$ http提供程序上的进度事件,但是由于某些原因,我一直将$
rootScope作为响应而不是实际进度(我将其用于上传)信息。由于缺少示例,我在Angular回购中找到了一些测试,但后来没有成功。
restClientInstance.post = function (requestParams) {
var postParams = {
method: "POST",
url: API_URL + requestParams.url,
headers: requestParams.headers,
data: requestParams.data,
eventHandlers: {
progress: function (c) {
console.log(c);
}
},
uploadEventHandlers: {
progress: function (e) {
console.log(e);
}
}
};
var promise = $http(postParams)
$rootScope.$apply();
return promise;
};
在这两种情况下,它都控制台$ rootScope而不是 lengthComputable
好吧,我最终做了这样的事情,只是自己处理了,因为添加到$ http的XHR事件对我不起作用。
var xhttp = new XMLHttpRequest();
var promise = $q.defer();
xhttp.upload.addEventListener("progress",function (e) {
promise.notify(e);
});
xhttp.upload.addEventListener("load",function (e) {
promise.resolve(e);
});
xhttp.upload.addEventListener("error",function (e) {
promise.reject(e);
});
xhttp.open("post",API_URL + requestParams.url,true);
xhttp.send(requestParams.data);
return promise.promise;
⚠️每个进度事件都会触发更改检测。
进度事件的种类 进度事件用来描述资源加载的进度,主要由 AJAX 请求、<img>、<audio>、<video>、<style>、<link>等外部资源的加载触发,继承了ProgressEvent接口。它主要包含以下几种事件。 abort:外部资源中止加载时(比如用户取消)触发。如果发生错误导致中止,不会触发该事件。 error:由于错误导致外部资源无法加载时触发。 load:外部资源加载成功时
Progress Events 规范是W3C 的一个工作草案,定义了与客户端服务器通信有关的事件。这些事件最早其实只针对XHR 操作,但目前也被其他API 借鉴。有以下6 个进度事件。 loadstart:在接收到响应数据的第一个字节时触发。 progress:在接收响应期间持续不断地触发。 error:在请求发生错误时触发。 abort:在因为调用abort()方法而终止连接时触发。 load:
问题内容: 如何从正在上传图像的AngularJS $ http POST请求中获取“进度”事件?是否可以在客户端进行此操作,还是我需要服务器在接收数据时报告进度? 问题答案: 我认为$ http.post()不能用于此目的。 至于客户端,它应该与HTML5浏览器一起使用,但是您可能必须创建自己的XMLHttpRequest对象和侦听器。
Software developers don’t really like to make schedules. Usually, they try to get away without one. “It’ll be done when it’s done!” they say, expecting that such a brave, funny zinger will reduce thei
当一个组织中有N名员工时,我们会得到N个日期偏移范围。类似于 1-4(即员工将在第一、第二、第三和第四天来) 2-6 8-9 ... 1-14 我们必须在最少的天数上组织一次活动,以便每个员工至少可以参加两次活动。请建议算法(可能是贪婪的)来做到这一点。 PS:事件是一天的事件。