Я пытаюсь сделать что-то вроде:
<div ng-controller="TestCtrl">
<div ng-repeat="(k,v) in items | filter:hasSecurityId">
{{k}} {{v.pos}}
</div>
</div>
Часть AngularJs:
function TestCtrl($scope)
{
$scope.items = {
'A2F0C7':{'secId':'12345', 'pos':'a20'},
'C8B3D1':{'pos':'b10'}
};
$scope.hasSecurityId = function(k,v)
{
return v.hasOwnProperty('secId');
}
}
Но почему-то он показывает мне все предметы. Как я могу отфильтровать (ключ, значение)?
Ответы:
Фильтры Angular могут применяться только к массивам, а не к объектам, из angular API -
У вас есть два варианта:
1) перейти
$scope.items
в массив или -2) предварительно отфильтровать
ng-repeat
элементы, например:И на контроллере:
jsfiddle : http://jsfiddle.net/bmleite/WA2BE/
источник
Моим решением было бы создать собственный фильтр и использовать его:
И в html:
источник
Также вы можете использовать
ng-repeat
сng-if
:источник
Или просто используйте
Смотрите обновленное решение здесь:
http://jsfiddle.net/RFontana/WA2BE/93/
источник
ng-if
вместо этогоВы можете просто использовать модуль angular.filter , а затем фильтровать даже по вложенным свойствам.
см .: jsbin
2 Примеры:
JS:
HTML:
источник
angular.filter
это не основной модуль angular, и вы являетесь его автором.toArray
фильтра больше нет. Есть ли замена, ведьfilter
фильтр по-прежнему не пропускает объекты?Это немного поздно, но я искал похожий фильтр и закончил использовать что-то вроде этого:
источник
Хотя этот вопрос довольно старый, я хотел бы поделиться своим решением для разработчиков angular 1. Дело в том, чтобы просто повторно использовать исходный угловой фильтр, но прозрачно передавать любые объекты в виде массива.
используйте это так:
вот плункер
источник
Я сделал немного больше общего фильтра, который уже использовал в нескольких проектах:
HTML:
JS:
источник