2014-02-27 108 views
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/

回答

5

角應$watchsafePostService.queue

嘗試:

$scope.$watch(function() { return safePostService.queue.length; }, function(item) { 
    $scope.count = item; 
}, true); 

小提琴: http://jsfiddle.net/CGWbq/4/

您在成功的情況下降低了隊列陣列:

self.queue.shift();

+0

太感謝你了!它的工作原理:)你對這個評論意味着什麼:在成功的情況下減少隊列數組? – kannix

+0

只是爲了解釋爲什麼計數增加之前減少,不是很重要:) –

相關問題