[英]Angular filter by multiple strings in array
问题是过滤具有2个类别的项目不会返回任何内容。 因此,通过过滤“ mulder”,应返回类别为“ mulder”和“ scully”的项目
我有定义以下内容的数据:
$scope.allnodes = [
{ name: "This is node 1", category: ["mulder"] },
{ name: "Another title is this one", category: ["scully"] },
{ name: "This is Another title", category: ["mulder"] },
{ name: "And finally a fourth title", category: ["mulder","scully"] }
];
相关的应用程序js是:
$scope.categories = ['Mulder','Scully'];
$scope.filterByCategory = function (node) {
return $scope.filter[node.category] || noFilter($scope.filter);
};
function noFilter(filterObj) {
for (var key in filterObj) {
if (filterObj[key]) {
return false;
}
}
return true;
}
这是部分渲染:
<div ng-controller="myCtrl">
<b>Category:</b>
<div ng-repeat="cat in categories">
<b><input type="checkbox" ng-model="filter[cat]" />{{cat}}
</b>
</div>
<hr />
<div ng-repeat="node in filtered=(allnodes | filter:filterByCategory)">
{{node.title}}
<div ng-repeat="term in node.category">
<label class="label label-info">{{term}}</label>
</div>
</div>
<hr />
Number of results: {{filtered.length}}
</div>
问题是node.category是一个数组。
您的filterByCategory应该看起来像这样:
$scope.filterByCategory = function(node) {
for (var key in $scope.filter) {
if ($scope.filter[key] && (!node.category || node.category.indexOf(key) < 0)) {
return false;
}
}
return true;
};
此功能检查当前项目的类别是否包含过滤器中所有选定的类别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.