2015-02-25 5 views
10

Ich habe eine Karte mit dem wichtigsten Werten zählen alsWie Kartengröße in AngularJS

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

folge, wenn es ein Array ist die Größe zu zählen, die ich tue mit:

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

und habe die Größe {{items.length}}

Im Falle einer Karte, die ich mit Iterierte Funktionen wie folgt:

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

aber wie man die Größe feststellen?

Jede Hilfe wird geschätzt. mit Object.keys

+0

Können Sie Ihre Objektstruktur beheben? Im Moment ist es nicht gültig. – dfsq

+0

@dfsq Entschuldigung, ich habe bearbeitet. – mzereba

+1

Nun, es ist immer noch nicht gültige JavaScript-Syntax. Sieht so aus, als ob du tatsächlich ein Array benötigst: '$ scope.items = [{" name ":" Jim "," alter ": 25}, {" name ":" Eric "," alter ": 25}]'. Oder wenn dies ein Objekt ist: '$ scope.items = {0: {" Name ":" Jim "," Alter ": 25}, 1: {" Name ":" Eric "," Alter ": 25} } '. – dfsq

Antwort

13

Ein Ansatz ist die Anzahl der Schlüssel in dem Objekt zu berechnen:

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

können Sie auch eine Hilfsfunktion definieren:

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

und verwenden Sie es in Vorlage:

{{ getLength(items) }} 
+0

Aber ich brauche es auf der Seite – mzereba

+1

Dann erstellen Sie eine Hilfsfunktion, siehe aktualisierte Antwort. – dfsq

+0

Es scheint, dass dies der einzige Weg ist, da es keine Funktion gibt, die Kartengröße aufzurufen. – mzereba

4

Ich schlage vor, einen Filter dafür zu verwenden, der für die gesamte Anwendung verwendet werden kann:

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

dann verwenden:

{{ items | objectKeysLength }} 

oder

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