Я использую собственный фильтр в списке 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);
}
});
});
};
});