Показать сообщение отдельно
  #1 (permalink)  
Старый 30.07.2013, 01:51
Новичок на форуме
Отправить личное сообщение для VerDiz Посмотреть профиль Найти все сообщения от VerDiz
 
Регистрация: 24.07.2013
Сообщений: 9

ng-repeat кастомный фильтр для фильтрации обьектов (непонятное поведение)
Доброго времени суток!

В руководстве написанно, что 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/
Ответить с цитированием