Como usar o ng-repeat para dictionarys em AngularJs?

Eu sei que podemos facilmente usar ng-repeat para objects json ou arrays como:

mas como podemos usar o ng-repeat para dictionarys, por exemplo:

 var users = null; users["182982"] = "{...json-object...}"; users["198784"] = "{...json-object...}"; users["119827"] = "{...json-object...}"; 

Eu quero usar isso com o dictionary de usuários:

 

É possível?. Se sim, como posso fazer isso no AngularJs?

Exemplo para minha pergunta: Em C #, definimos dictionarys como:

 Dictionary dict = new Dictionary(); //and then we can search for values, without knowing the keys foreach(var val in dict.Values) { } 

Existe uma function embutida que retorna os valores de um dictionary como em c #?

Você pode usar

 
  • {{name}}: {{age}}
  • Veja a documentação do ngRepeat . Exemplo: http://jsfiddle.net/WRtqV/1/

    Eu também gostaria de mencionar uma nova funcionalidade de AngularJS ng-repeat , ou seja, pontos de início e fim de repetição especiais. Essa funcionalidade foi adicionada para repetir uma série de elementos HTML em vez de apenas um único elemento HTML pai.

    Para usar os pontos de início e fim da repetidora, você deve defini-los usando as diretivas ng-repeat-start e ng-repeat-end respectivamente.

    A diretiva ng-repeat-start funciona de maneira muito semelhante à diretiva ng-repeat . A diferença é que ele irá repetir todos os elementos HTML (incluindo a tag na qual ele está definido) até a tag HTML final onde ng-repeat-end é colocada (incluindo a tag com ng-repeat-end ).

    Exemplo de código (de um controlador):

     // ... $scope.users = {}; $scope.users["182982"] = {name:"John", age: 30}; $scope.users["198784"] = {name:"Antonio", age: 32}; $scope.users["119827"] = {name:"Stephan", age: 18}; // ... 

    Modelo HTML de amostra:

     
    ==== User details ====
    {{$index+1}}. {{id}} {{user.name}} ({{user.age}})
    some img
    ======================

    A saída seria semelhante à seguinte (dependendo do estilo HTML):

     ==== User details ==== 1. 119827 Stephan (18) ====================== ==== User details ==== 2. 182982 John (30) [sample image goes here] ====================== ==== User details ==== 3. 198784 Antonio (32) [sample image goes here] ====================== 

    Como você pode ver, ng-repeat-start repete todos os elementos HTML (incluindo o elemento com ng-repeat-start ). Todas as propriedades especiais ng-repeat (neste caso, $first e $index ) também funcionam conforme o esperado.

    Os desenvolvedores de JavaScript tendem a se referir à estrutura de dados acima como um object ou hash em vez de um Dicionário.

    Sua syntax acima está errada quando você está inicializando o object users como null. Eu presumo que este é um erro de digitação, como o código deve ler:

     // Initialize users as a new hash. var users = {}; users["182982"] = "..."; 

    Para recuperar todos os valores de um hash, você precisa iterar usando um loop for:

     function getValues (hash) { var values = []; for (var key in hash) { // Ensure that the `key` is actually a member of the hash and not // a member of the `prototype`. // see: http://javascript.crockford.com/code.html#for%20statement if (hash.hasOwnProperty(key)) { values.push(key); } } return values; }; 

    Se você planeja fazer muito trabalho com estruturas de dados em JavaScript, a biblioteca underscore.js definitivamente vale a pena dar uma olhada. O sublinhado vem com um método de values que executará a tarefa acima para você:

     var values = _.values(users); 

    Eu mesmo não uso o Angular, mas tenho certeza que haverá um método de conveniência construído para iterar os valores de um hash (ah, lá vamos nós, Artem Andreev fornece a resposta acima :))