3
我試圖從其他服務數組長度綁定到我的控制範圍是這樣的:angularjs綁定服務數組長度屬性控制器範圍
app.controller('TestCtrl', function ($scope, safePostService) {
$scope.count = safePostService.queue.length;
$scope.addOne = function() {
safePostService.post('/echo/json/', {
json: JSON.stringify({
text: 'some text',
array: [1, 2, 'three'],
object: {
par1: 'another text',
par2: [3, 2, 'one'],
par3: {}
}
}),
delay: 3
});
};
});
這就是我的服務:
app.service('safePostService', function ($http, $timeout) {
var self = this;
var syncIntervall = 1000;
var timeoutPromise;
var sending = false;
this.queue = [];
this.post = function (url, data) {
self.queue.push({
url: url,
data: data
});
syncNow();
};
function syncNow() {
$timeout.cancel(timeoutPromise);
syncLoop();
}
function syncLoop() {
if (sending) return;
sending = true;
var item = self.queue[0];
$http.post(item.url, item.data).
success(function() {
self.queue.shift();
afterResponse(true);
}).
error(function() {
afterResponse(false)
});
}
function afterResponse(success) {
sending = false;
if (self.queue.length > 0) {
timeoutPromise = $timeout(syncLoop, (success) ? 50 : syncIntervall);
}
}
});
$ scope.count保持顯示0並且不會更新。
這裏是一個小提琴: http://jsfiddle.net/kannix/CGWbq/
太感謝你了!它的工作原理:)你對這個評論意味着什麼:在成功的情況下減少隊列數組? – kannix
只是爲了解釋爲什麼計數增加之前減少,不是很重要:) –