我在Angular 1的ng-repeat
列表中使用自定义过滤器。
过滤器已成功过滤搜索结果,但它无法正常工作。
目前,根据过滤器是否存在过滤结果。 例如'清洁'或'DIY'或'营销'
但是,过滤器不检查布尔值是true
还是false
。
因此,'cleaning:false'包含在与'cleaning:true'相同的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);
}
});
});
};
});
答案 0 :(得分:0)
一种解决方案是使滤波器成为2种不同的属性吗?
所以就像{
'cat': 'Moving & Delivery',
'filter': {'moving', true}
}
现在进入过滤器。 检查每个部分以决定是否应该添加。 因此,通过使用过滤器[1]检查它是否是相同的bool,并检查该项是否具有过滤器[0]的属性。