Пользовательский фильтр angular возвращает результаты только в том случае, если логическое значение === true

Я использую собственный фильтр в списке ng-repeat в Angular 1.

Фильтр успешно фильтрует результаты поиска, однако он не работает так, как мне нужно.

В настоящее время результаты фильтруются в зависимости от наличия кота-фильтра. Например, «уборка», «сделай сам» или «маркетинг».

Однако фильтр не проверяет, является ли логическое значение true или false.

Таким образом, результаты, в которых «очистка: ложь», включены в тот же ng-repeat, что и «очистка: истина».

Я хочу вернуть результаты только в том случае, если объект фильтра (например, очистка) оценивается как true.

У меня нет большого опыта написания собственных фильтров, поэтому любой вклад или толчок в правильном направлении будут действительно оценены! Заранее спасибо!

Вот вариант выбора раскрывающегося списка:

<select class="sortBy" ng-model="selectedCat" ng-value="x.filter" ng-options="x.cat for x in taskCategories">
</select>

Вот массив, по которому проверяется фильтр, каждый объект в массиве имеет заголовок для отображения в раскрывающемся списке и фильтр, который я хочу запустить:

$scope.taskCategories = [{
      'cat': 'All',
      'filter': ''
    }, {
      'cat': 'Cleaning',
      'filter': 'cleaning: true'
    }, {
      'cat': 'Moving & Delivery',
      'filter': 'moving: true'
    }, {
      'cat': 'DIY',
      'filter': 'DIY: true'
    }, {
      'cat': 'Marketing & Design',
      'filter': 'marketing: true'
    }, {
      'cat': 'Digital & IT',
      'filter': 'onlineIT: true'
    }, {
      'cat': 'Events & Photography',
      'filter': 'photoEvents: true'
    }, {
      'cat': 'Business & Admin',
      'filter': 'office: true'
    }, {
      'cat': 'Fun & Quirky',
      'filter': 'funQuirky: true'
    }, {
      'cat': 'Misc & Other ',
      'filter': 'misc: true'
    }];

Вот пользовательский фильтр:

.filter('customFilter', function() {
return function(items, search) {
  if (!search) {
    return items;
  }
  return items.filter(function(element) {

    //attempt 1      
    return Object.getOwnPropertyNames(element).find(function(x) {
      return x === search.substring(0, search.indexOf(':'));
    });
    //attempt 2 
    return Object.getOwnPropertyNames(element).find(function(x) {
      return x === search.substring(0, 2);
    });
    //attempt 3 
    return Object.getOwnPropertyNames(element).find(function(x) {
      return x === search;
    });
    //attempt 4
    return Object.getOwnPropertyNames(element).find(function(x) {
      if(x === true) {
      return x === search.substring(0);
      }
    }); 

  });
 };
});

person amyloula    schedule 25.08.2016    source источник


Ответы (1)


Одним из решений было бы сделать фильтр двумя разными свойствами?

так пусть это будет как { 'cat': 'Moving & Delivery', 'filter': {'moving', true} }

Теперь внутри ваших фильтров. проверьте каждую часть, чтобы решить, следует ли ее добавить. поэтому один проверяет, является ли это одним и тем же логическим значением, используя фильтр [1], а другой проверяет, имеет ли элемент свойство фильтра [0].

person Jeffrey Jarry    schedule 25.08.2016