Filtro angular um object por suas propriedades

Eu tenho um object com uma série de propriedades de object que está na seguinte estrutura semelhante (que é a maneira como os dados estão voltando de um serviço):

{ "1": { "type": "foo", "name": "blah" }, "2": { "type": "bar" }, "3": { "type": "foo" }, "4": { "type": "baz" }, "5": { "type": "test" } } 

Quando eu faço um ng-repeat, posso iterar todos os 5 desses objects, algo como:

 
{{item.type}}

No entanto, o que eu realmente quero fazer é iterar apenas sobre os itens que não são do tipo “foo” , ou seja, 3 iterações em vez de 5. Eu sei que os filtros podem de alguma forma ser aproveitados para fazer isso, mas não sei como. Eu tentei o seguinte:

 
{{item.type}}

mas isso não funciona. De fato, mesmo fazendo o seguinte para limitar a apenas 2 objects (aqueles com item.type === “foo”), ele não funciona e faz 5 iterações:

 
{{item.type}}

Em essência, quero fazer algo semelhante a:

 
{{item.type}}

No entanto, sei que não funciona.

O filtro funciona em matrizes, mas você tem um literal de object.

Assim, você pode converter seu object literal em uma matriz ou criar seu próprio filtro do que o literal do object.

Se você não precisa desses valores de índice, a conversão para uma matriz pode ser sua melhor aposta (aqui está um violino com a matriz funcionando: http://jsfiddle.net/NqA8d/3/ ):

 $scope.items = [{ "type": "foo", "name": "blah" }, { "type": "bar" }, { "type": "foo" }, { "type": "baz" }, { "type": "test" }]; 

Caso você queira fazer um filtro, aqui está uma maneira de fazer isso:

 myApp.filter('myFilter', function () { return function (items, search) { var result = []; angular.forEach(items, function (value, key) { angular.forEach(value, function (value2, key2) { if (value2 === search) { result.push(value2); } }) }); return result; } }); 

E esse violino: http://jsfiddle.net/NqA8d/5/

Pouco tarde para responder, mas isso pode ajudar:

Se você quiser filtrar um neto (ou mais) do object fornecido, poderá continuar a construir sua hierarquia de objects. Por exemplo, se você quiser filtrar em ‘thing.properties.title’, você pode fazer o seguinte:

 

Você também pode filtrar várias propriedades de um object apenas adicionando-as ao seu object de filtro:

 

A syntax de ‘não é igual’ é apenas um pouco fora, tente o seguinte:

 

Embora eu concorde que a conversão do seu object possa ser a melhor opção aqui, você também pode usar essa function de filtro:

 angular.module('app').filter('objectByKeyValFilter', function () { return function (input, filterKey, filterVal) { var filteredInput ={}; angular.forEach(input, function(value, key){ if(value[filterKey] && value[filterKey] !== filterVal){ filteredInput[key]= value; } }); return filteredInput; }}); 

como isso:

 
{{key}}{{value.type}}

Veja também o Plunker .

Tente isso (no controlador):

 $scope.notFooFilter = function(item) { return (item.type !== 'foo'); }; 

E na marcação HTML:

 
{{item.type}}

Não precisa de tudo isso. Esta solução funciona bem sem ter que converter ou criar seu próprio filtro:

  {{myModel.userSelectedHour["Start"]}} 

Portanto, object. [“Property”] em vez de object.property.