У меня есть множество продуктов, которые я повторяю с помощью ng-repeat, и я использую
<div ng-repeat="product in products | filter:by_colour">
фильтровать эти продукты по цвету. Фильтр работает, но если название продукта / описание и т. Д. Содержит цвет, то продукт остается после применения фильтра.
Как настроить фильтр так, чтобы он применялся только к цветовому полю моего массива, а не к каждому полю?
angularjs
ng-repeat
angularjs-filter
Тим Вебстер
источник
источник
Ответы:
Смотрите пример на странице фильтра . Используйте объект и установите цвет в свойстве color:
источник
filter:{ color: '...', size: '...', ...}
Укажите свойство (то есть
colour
), где вы хотите применить фильтр:источник
'!'+
, вот так<div ng-repeat="product in products | filter:{ colour: '!'+by_colour }">
<div ng-repeat="product in products | filter:{ resultsMap.annie: '!!' }">
или (что - то эквивалент) , как это:<div ng-repeat="product in products | filter:by">
и на контроллере:$scope.by = { 'resultsMap.annie': '!!' };
. Этот второй подход дает вам больше контроля над фильтруемым свойством. Примечание:'!!'
означает «не ноль».customFilter
может быть простой объект,scope
который вы обновляете по мере необходимости. Проверьте этот поршень .Вы можете фильтровать по объекту со свойством, совпадающим с объектами, которые вы должны фильтровать по нему:
Это, конечно, может передаваться переменной, как предложил Марк Райкок.
источник
Если вы хотите фильтровать внука (или глубже) данного объекта, вы можете продолжить строить иерархию объектов. Например, если вы хотите отфильтровать 'thing.properties.title', вы можете сделать следующее:
Вы также можете отфильтровать несколько свойств объекта, просто добавив их в свой объект фильтра:
источник
Лучший способ сделать это - использовать функцию:
HTML
Javascript
Кроме того, вы можете использовать ngHide или ngShow для динамического отображения и скрытия элементов на основе определенных критериев.
источник
Будьте осторожны с угловым фильтром. Если вы хотите выбрать конкретное значение в поле, вы не можете использовать фильтр.
Пример:
Javascript
HTML
Это выберет оба, потому что используйте что-то вроде
substr
Это означает, что вы хотите выбрать продукт, где «цвет» содержит строку «синий», а не где «цвет» это «синий».
источник
<div ng-repeat="product in products | filter: { color: 'blue' }:true">
будет работать только с точными совпадениями (в конце 'true' является аргументом компаратора: ссылкаПоиск по цвету:
Вы можете сделать внутреннее гнездо тоже.
источник
Если вы должны были сделать следующее:
... вы получите не только элементы itemTypeId 2 и itemStatus 1, но вы также получите элементы с itemType 20, 22, 202, 123 и itemStatus 10, 11, 101, 123. Это потому, что фильтр: {.. .} Синтаксис работает как строка, содержащая запрос.
Тем не менее, если вы добавите условие : true , оно выполнит фильтрацию по точному совпадению:
источник
мой путь это
Отображать как это
источник
Вы должны использовать
filter:{color_name:by_colour}
вместоЕсли вы хотите сопоставить одно свойство объекта, то напишите это свойство вместо объекта, иначе какое-то другое свойство получит совпадение.
источник
Укажите свойство в фильтре объекта, к которому вы хотите применить фильтр:
Но вы хотите применить фильтр только по имени
источник
Если вы хотите фильтр для одного поля:
Если вы хотите фильтр для всех полей:
и https://docs.angularjs.org/api/ng/filter/filter для вас.
источник