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