2015-02-25 15 views
10

Mam mapę z kluczowych wartości następującoJak policzyć rozmiar mapy w angularjs

$scope.items = { 
    { 
    0={"name": "Jim", "age" : 25} 
    }, 
    { 
    1={"name": "Eric", "age" : 25} 
    } 
}; 

czy to tablica policzyć wielkości z robię:

<div ng-repeat="item in items> 
</div> 

i mają rozmiar {{items.length}}

W przypadku mAP I z pozycji iteracyjne następująco:

<div ng-repeat="(id, item) in items"> 
</div> 

ale jak ustalić rozmiar?

Każda pomoc jest doceniana.

+0

można naprawić swój obiekt strukturę? W tej chwili nie jest ważny. – dfsq

+0

@dfsq przepraszam, edytowałem. – mzereba

+1

Cóż, wciąż nie jest poprawna składnia javascript. Wygląda na to, że rzeczywiście potrzebujesz tablicy: '$ scope.items = [{" name ":" Jim "," age ": 25}, {" name ":" Eric "," age ": 25}]'. Lub, jeśli to jest obiekt, to: '$ scope.items = {0: {" name ":" Jim "," age ": 25}, 1: {" name ":" Eric "," age ": 25} } '. – dfsq

Odpowiedz

13

Jednym ze sposobów jest obliczyć liczbę kluczy w obiekcie za pomocą Object.keys:

$scope.itemsLength = Object.keys($scope.items).length; 

można również zdefiniować funkcję pomocniczą:

$scope.getLength = function(obj) { 
    return Object.keys(obj).length; 
} 

i używać go w szablonie:

{{ getLength(items) }} 
+0

Ale potrzebuję tego na stronie – mzereba

+1

Następnie utwórz funkcję pomocnika, zobacz zaktualizowaną odpowiedź. – dfsq

+0

Wygląda na to, że jest to jedyny sposób, ponieważ nie ma funkcji wywoływania rozmiaru mapy. – mzereba

4

Proponuję użyć do tego filtra, który może być używany w całej aplikacji:

angular.module('filters').filter('objectKeysLength', [function() { 
    return function(items) { 
     return Object.keys(items).length; 
    }; 
}]); 

Następnie użyj go:

{{ items | objectKeysLength }} 

lub

<div ng-if="(items | objectKeysLength) > 0" > 
    ...content... 
</div> 
Powiązane problemy