2015-02-25 19 views
10

devo una mappa con valori chiave come segueCome contare dimensione della mappa in AngularJS

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

se fosse una matrice a contare le dimensioni che con fare:

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

e abbia la dimensione {{items.length}}

Nel caso di una mappa che ho con oggetti iterazione come segue:

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

ma come stabilire la dimensione?

Qualsiasi aiuto è apprezzato.

+0

si può risolvere la tua struttura dell'oggetto? In questo momento non è valido. – dfsq

+0

@dfsq scusate, ho modificato. – mzereba

+1

Beh, non è ancora la sintassi javascript valida. Sembra che tu abbia davvero bisogno di un array: '$ scope.items = [{" name ":" Jim "," age ": 25}, {" name ":" Eric "," age ": 25}]'. Oppure se questo è un oggetto allora: '$ scope.items = {0: {" name ":" Jim "," age ": 25}, 1: {" name ":" Eric "," age ": 25} } '. – dfsq

risposta

13

Un approccio è quello di calcolare il numero di chiavi in ​​l'oggetto utilizzando Object.keys:

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

è anche possibile definire una funzione di supporto:

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

e utilizzarlo in modello:

{{ getLength(items) }} 
+0

Ma ho bisogno nella pagina – mzereba

+1

Quindi creare una funzione di supporto, vedere la risposta aggiornata. – dfsq

+0

Sembra che questo sia l'unico modo, dal momento che non esiste una funzione per chiamare la dimensione della mappa. – mzereba

4

Suggerisco di utilizzare un filtro per questo, che può essere utilizzato attraverso l'applicazione:

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

quindi utilizzarlo:

{{ items | objectKeysLength }} 

o

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