2016-06-10 55 views
3

所以,我所遇到的情況是我遍歷了一個JSON對象列表,它包含一個列表作爲屬性。我有一個內部循環重複該列表屬性。沿此線的東西:Angular.js:如何計算嵌套ng-repeat中元素的數量

Number of results: {{count}} 

<div ng-repeat="jsonObject in outerList | someFilter" ng-show="innerList.length"> 
    <h1>{{jsonObject.Name}}</h1><br> 
    <div ng-repeat="items in jsonObject.listAttr | someOtherFilter as innerList"> 
     {{items.data}}<br> 
    </div> 
    <br> 
</div> 

我所面臨的問題是尋找一種方法來抓住整個內重複每次迭代所有元素的合計數。因此,如果第一個jsonObject有兩個與內部過濾器相匹配的東西,第二個jsonObject有三個與內部過濾器相匹配的東西,那麼我們在整個循環之外(在上面的count變量或類似的東西中)顯示5的計數。

我已經研究了很多方法來嘗試並獲得數量,但沒有任何成功。我發現的一個扳手被扔進了一些解決方案,我發現過濾器是用戶可以隨時更改的東西(通過搜索框,一個),所以我不能只應用所有的過濾器控制器在頁面加載並顯示。我可以在$範圍內有5個對象開始,直到用戶鍵入的東西在搜索框中那滴數下降到2

+0

您可以使用各家之長並給予過濾列表中的別名一起加入他們做到這一點。我已經爲其他類似的實例做了一些基本的指針:http://angular-tips.com/blog/2014/08/tip-accessing-filtered-array-outside-ng-repeat/ – user1934587390

回答

1

我認爲你要這個......

功能

$scope.moreOne = function(counter) { 
    $scope[counter]++; 
} 

在JSONObject的每一個元素,這是算作

<div ng-repeat="jsonObject in outerList | someFilter" ng-show="innerList.length"> 
     <h1>{{jsonObject.Name}}</h1><br> 
     <div ng-repeat="items in jsonObject.listAttr | someOtherFilter as innerList" ng-init="moreOne('count')"> 
      {{items.data}}<br> 
     </div> 
     <br> 
    </div> 

你看到的NG-INIT?

ng-init="moreOne('count')" 

也許這種解決方案不是最好的...... Saludos! :-)

UPDATE

好吧,你可以使用觀察家控制器模型的變化。如果outerList或任何(您可以爲任何屬性定義觀察者)更改,則將觸發觀察者。而你只需要不moreOne功能的代碼:-)

$scope.$watch("outerList", function(list) { 
     $scope.count = 0; 
     for(var i = 0; i < list.length; i++) { 
     $scope.count += list[i]['listAttr'].length; 
     } 
    }); 
+0

我看到類似於這在其他地方,但不會動態更新,對吧?如果列表最終被filter/etc更新了,它會繼續增加計數並且永遠不會重置爲0? –

+0

@ Dominator_101,我已經更新了我的答案。我希望能幫助你:-) –