2015-08-26 2 views
0

Я создаю приложение, в котором вы можете фильтровать элементы, нажимая на кнопки категорий. Большинство элементов имеют несколько категорий. При нажатии на кнопки категории я создаю массив с нажатыми категориями.Угловая: фильтрация нескольких элементов из массива

Каждый элемент для фильтрации имеет массив для категорий, к которым он принадлежит. Пример:

Пункт 1 - категория: животное, коричневый, хвост

Пункт 2 - категория: животные, белая

Пункт 3 - категория: человек, высокая

При нажатии на категория кнопок «животное», он показывает только пункты 1 и 2, затем, когда я нажимаю на коричневый цвет, он показывает только пункт 1. Когда я снимаю выделение всех предметов и нажимаю в этом порядке - животное, хвост. Он ничего не показывает:/

Я просмотрел некоторые подобные темы, но не нашел надежного способа сделать это.

Возможно ли вообще это сделать без создания специального фильтра?

+0

Покажите нам ваш код, то, что вы пробовали до сих пор? – Sphaso

+1

Есть ли причина, по которой вы не хотите настраивать фильтр? Кажется, это точно так же, как для одного, и было бы довольно тривиально создавать. – DRobinson

+0

проверить это: http://fdietz.github.io/recipes-with-angular-js/common-user-interface-patterns/filtering-and-sorting-a-list.html –

ответ

1

Если вы передумали добавить «настраиваемый фильтр», вот что должно работать.

angular.module('myApp').filter('matchesAll', function() { 
    return function(items, relevant, property) { 
     if(!(relevant && relevant.length)){ 
      return items; // No categories to compare with, return everything 
     } 

     property = property || 'categories'; // By default look at categories 

     return items.filter(function(item) { 
      var itemProps = item[property]; 
      return relevant.every(function(relevantCategory){ 
       return itemProps.indexOf(relevantCategory) !== -1; 
      }); 
     }); 
    }; 
}); 

Это будет использоваться как любой ngRepeat фильтр:

ng-repeat="item in items | matchesAll:selectedCategories" 

JSFiddle демонстрирующего его: http://jsfiddle.net/3an5wr0b/

+0

Кажется, вы выбрали ошибку: "TypeError: Невозможно прочитать свойство" length undefined ". Более близкое выражение показывает ошибку здесь: «if (! Important && related.length) {« Также обратите внимание, что я использую AngularJS v1.2.9 – yodalr

+0

Извините, я ввел эту ошибку, когда я удлинил переменную 'prop' на' свойство ", чтобы сделать код более четким. Я пропустил одно место. – DRobinson

+0

Хм, похоже, не помогает, хотя я исправил опечатку. Как будто он не может получить значение для «релевантного». – yodalr

Смежные вопросы