通过数组中的多个字符串进行角度过滤

Angular filter by multiple strings in array

本文关键字:过滤 字符串 数组      更新时间:2023-09-26

问题是过滤具有 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>

http://jsfiddle.net/kevinhowbrook/h2bekshb/6/

问题是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;
};

此函数检查当前项目的类别是否包含筛选器中的所有选定类别。

http://jsfiddle.net/cutm3p9c/1/