如何从数组中过滤ngRepeat中的项目?

时间:2017-08-18 17:42:34

标签: javascript angularjs arrays

我很难找到一种基于数字数组在ng-repeat中过滤一组结果的方法。这些数字可以代表我想看的结果,也可以不看。我能够在视图中使用过滤器并按一个数字过滤,这有效,但我想在那里放一个数组并按数组过滤。我不关心过滤器是在视图,控制器还是单独的过滤器中。

以下代码成功过滤了论坛ID为60

的主题
  <div ng-repeat="topic in topics | filter:{forum_id:60}">
    Forum ID: {{topic.forum_id}} Forum Name: {{topic.forum_title}}
  </div>

我想按数组过滤

  <div ng-repeat="topic in topics | filter:{forum_id:ARRAY_HERE}">
    Forum ID: {{topic.forum_id}} Forum Name: {{topic.forum_title}}
  </div>

在这里完全插入: https://plnkr.co/edit/dCZ7DV?p=preview

3 个答案:

答案 0 :(得分:1)

将您自己的功能传递给过滤器:

<div ng-repeat="topic in topics | filter:myFilterMethod(topic)">
    Forum ID: {{topic.forum_id}} Forum Name: {{topic.forum_title}}
</div>

并在您的控制器中:

$scope.myFilterMethod = function() {
    return function(e) {
        return $scope.filterBy.includes(e.forum_id);
    }
}

updated plunkr

答案 1 :(得分:1)

此外,您可以使用ng-ifindexOf功能。

 <div ng-repeat="topic in topics" ng-if="filterBy.indexOf(topic.forum_id) !== -1">
     Forum ID: {{topic.forum_id}} Forum Name: {{topic.forum_title}}
 </div>

Demo

答案 2 :(得分:1)

本地,angular中的filter属性不起作用,所以你需要自己定义一个手动过滤器。

你可以这样做answer

angular.module('myApp').filter('selectedArray', function() {
    return function(array, tags) {
        return array.filter(function(object) {

            for (var i in object.XXX) {
                if (array.indexOf(object.XXX[i]) != -1) {
                    return true;
                }
            }
            return false;

        });
    };
});

然后您就可以使用它:

<ul>
    <li ng-repeat="task in tasks | selectedArray:Array"></li>
</ul>

在此示例中,响应是一个对象数组,您需要将其定制到数组

希望它有所帮助。