Доброго времени суток!
В руководстве написанно, что ng-repeat работает только с массивами.
Часто возникает нужда в хешах и нужно их обходить с помощью ng-repeat и применить filter. Ниже приведенный пример работает, но не так как надо - игнорирует фильтр.
<div ng-app="tmp">
<div ng-controller="Ctrl">
<ul ng-repeat="(key,value) in items | filter:{val:1}"> {{value.name}} </ul>
</div>
<div>
angular.module('tmp',[])
.controller('Ctrl',['$scope', function(data) {
data.items = {
a:{name:'a1', val:1},
b:{name:'a2', val:2},
c:{name:'a3', val:1}
}
}])
Выход есть - это создать свой фильтр. Ниже приведенный пример(Фильтр) работает так, как надо.
.filter('customFilter',function(){
return function (items, criterion) {
console.log('Джина вызывали?')
var tmp = {};
for(var i in items){
var item = items[i];
if(item.val == criterion.val){
tmp[i] = item;
}
}
return tmp;
}
})
Теперь собственно вопрос:
Почему сообщение
"Джина вызывали?" в консоль выводится два раза?
Вот фидл с примером
http://jsfiddle.net/yMLt9/