Angular: 从数组中过滤多项
Angular: filtering multiple items from array
我正在创建一个应用程序,您可以在其中通过单击类别按钮来过滤项目。大多数项目都有多个类别。当按下类别按钮时,我创建了一个包含按下类别的数组。
每个要过滤的项目都有一个数组,用于表示它所属的类别。
示例:
项目 1 - 类别:动物、棕色、尾巴
项目 2 - 类别:动物,白色
项目 3 - 类别:人类、高
当我按下类别按钮 "animal" 时,它只显示项目 1 和 2,然后当我按下棕色时,它只显示项目 1。当我取消选择所有项目并按此顺序按下时 -动物, 尾巴.它没有显示任何内容:/
我查看了一些类似的主题,但没有找到可靠的方法。
是否可以在不创建自定义过滤器的情况下做到这一点?
如果您改变主意添加 "custom filter",这里应该可以。
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/
我正在创建一个应用程序,您可以在其中通过单击类别按钮来过滤项目。大多数项目都有多个类别。当按下类别按钮时,我创建了一个包含按下类别的数组。
每个要过滤的项目都有一个数组,用于表示它所属的类别。 示例:
项目 1 - 类别:动物、棕色、尾巴
项目 2 - 类别:动物,白色
项目 3 - 类别:人类、高
当我按下类别按钮 "animal" 时,它只显示项目 1 和 2,然后当我按下棕色时,它只显示项目 1。当我取消选择所有项目并按此顺序按下时 -动物, 尾巴.它没有显示任何内容:/
我查看了一些类似的主题,但没有找到可靠的方法。
是否可以在不创建自定义过滤器的情况下做到这一点?
如果您改变主意添加 "custom filter",这里应该可以。
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/