1

我的應用程序使用Bootstrap 3和AngularJS。我試圖根據ng-repeat的過濾結果來計算每個州的農民市場數量。如何獲取ng-repeat上的對象屬性的項目數

我的JSON數據看起來像這樣

$scope.fmData = [ 
{ 
    "MarketName": "Farm1", 
    "Bakedgoods" :"N", 
    "Cheese":"Y", 
    "Eggs":"N", 
    "latitude": 42.374858, 
    "longitude": -72.519422, 
    "state:": "New York" 
}, 
{ 
    "MarketName": "Farm2", 
    "Bakedgoods" :"N", 
    "Cheese":"Y", 
    "Eggs":"N" 
    "latitude": 42.5728, 
    "longitude": -72.1421, 
    "state:": "Florida" 
}, 
{ 
    "MarketName": "Farm3", 
    "Bakedgoods" :"Y", 
    "Cheese":"Y", 
    "Eggs":"N" 
    "latitude": 42.318, 
    "longitude": -71.7757, 
    "state:": "New York" 
} 
] 

這是我建立了我的NG-重複使用自定義過濾器:

<div ng-repeat="farmer in fmData | myFilter:SearchFood"> 

我使用複選框,將過濾掉,只展示有選定食品的農貿市場。

<div class="checkbox"> 
    <label> 
     <input type="checkbox" ng-model="SearchFood.Bakedgoods" /> 
    </label> 
</div> 
<div class="checkbox"> 
    <label> 
     <input type="checkbox" ng-model="SearchFood.Cheese" /> 
    </label> 
</div> 
<div class="checkbox"> 
    <label> 
     <input type="checkbox" ng-model="SearchFood.Eggs" /> 
    </label> 
</div> 

我的自定義過濾器是這樣的:

app.filter('myFilter', function() { 
return function(markets, range) { 
    var out = []; 
    angular.forEach(markets, function(Mitem, Mindex){ 
    var flag = true; 
    angular.forEach(range, function(Ritem, Rindex){ 
     if(!Ritem) return; 
     MitemBoolVal = (Mitem[Rindex] == "Y"); 
     flag = ((MitemBoolVal == Ritem && flag)); 
    }); 

    if(flag){ 
     out.push(Mitem); 
    } 
    }); 

    return out; 
} 
    }); 

這裏是什麼,我想實現一些例子:

默認情況下,如果烘焙食品,奶酪和雞蛋是選中,我會看到紐約有2個農貿市場,佛羅里達有1個農貿市場。

如果我查了蛋,我會看到紐約有0個農貿市場,佛羅里達有0個農貿市場。

如果我查了奶酪,我會看到紐約有2個農貿市場,佛羅里達有1個農貿市場。

如果我檢查了烘焙食品和奶酪,我會看到紐約有1個農貿市場,佛羅里達有0個農貿市場。

任何幫助將不勝感激!

回答

1

您可以在JavaScript中使用您的過濾器。剛剛注入$filter到控制器中,然後執行:

var filtered = $filter('myFilter')($scope.fmData, $scope.SearchFood); 

這會給你的過濾數組,你可以通過它的循環:

$scope.statesCount = {}; 
filtered.forEach(function(item){ 
    // if item.state is not in our object yet, create it with value of 1 
    if(typeof $scope.statesCount[item.state] === "undefined") 
     $scope.statesCount[item.state] = 1; 
    // if it is, increment its count 
    else 
     $scope.statesCount[item.state]++; 
} 

然後:

$scope.statesCount['New York'] // equals number of farmers markets in New York 
$scope.statesCount['Florida'] // equals number of farmers markets in Florida 

等。

+0

非常感謝你,kamilkp。有用!! – user3314402

0

你可以通過$ index來得到你的ng-repeat計數沒有。

$index = $index+1 

或在您的ng-repeat聲明/ DIV只是

{{index+1}}

更多: http://docs.angularjs.org/api/ng/directive/ngRepeat

+0

感謝您的建議AngularHarsh,但我想要計算一次對象attrib的次數ute的值在ng-repeat時發生。比如,我怎樣才能算出紐約州和佛羅里達州在ng-repeat的「狀態」中出現了多少紐約州和佛羅里達州。如果我做了fmData.length,我可以得到農民市場的總數(3)。不過,我想更具體,看到2個農貿市場是從紐約和1是從佛羅里達 – user3314402

+0

您應該爲創建plunker /的jsfiddle。將能夠更好地幫助。 – AngularHarsh

+0

kamilk能夠幫助我。謝謝你!我會努力學習如何使用plunker /時的jsfiddle我有機會爲未來的問題:) – user3314402