如何从AngularJS ng-repeat中排除项目

时间:2015-02-09 03:36:44

标签: javascript json angularjs angularjs-ng-repeat

是否可以排除ng-repeat中的项目?

例如,我有类似于以下内容(简化以缩短内容):

<div class="row" data-ng-repeat="entry in data.feed.entry | orderBy:'gsx$timestamp.$t':true">
{{entry.gsx$jobID.$t}}
</div>

我有另一个名为 exclusionData 的范围对象,其结构类似。我想排除出现在 exclusionData.feed.entry.gsx $ jobID中的第一个ng-repeat中的任何项目。$ t

或者有更简单的方法在我的控制器中执行此操作(即立即排除数据)?数据和exclusionData都来自两个不同的JSON提要。

4 个答案:

答案 0 :(得分:2)

这将排除匹配数据,只需添加ng-if,并添加一个爆炸使其变得虚假。

<div 
    class="row"
    data-ng-repeat="(key, entry) in data.feed.entry | orderBy:'gsx$timestamp.$t':true"
    ng-if="!exclusionData.feed[key]gsx$jobID.$t">
    {{entry.gsx$jobID.$t}}
</div>

答案 1 :(得分:1)

您可以使用下面显示的过滤器,也可以只使用ng-if / ng-show

<div class="row" data-ng-repeat="entry in data.feed.entry | orderBy:'gsx$timestamp.$t':true | filter: {gsx$exlucde.$t: true}">
{{entry.gsx$jobID.$t}}
</div>

data.feed.entry = [{
    gsx$jobID.$t: 'something',
    gsx$exlucde.$t: true,
    gsx$timestamp.$t: '1/1/1990'
}]

答案 2 :(得分:0)

最简单的方法是在重复中使用过滤器指令,但您也可以在控制器中执行此操作。

这取决于您从OO设计角度看应用程序的样子。

答案 3 :(得分:0)

您可以创建如下过滤器:

angular.module('appFilters', []).filter('yourFilterName', function() {
    return function(input, key) {          
      var myList = [];
      for(var i = 0; i < input.length; i++){
        var found = _.find($scope.exclusionData, function() { // You can replace this with your own function.
          // Your own logic here    
        });

        if(found){              
          myList.push(input[i]);
        }
      }
      return myList;
    };
  });

我假设您的项目中包含下划线,但您可以实现自己的搜索功能。

您在模板中传递过滤器,如下所示:

<div class="row" data-ng-repeat="entry in data.feed.entry | yourFilterName | orderBy:'gsx$timestamp.$t':true">
  {{entry.gsx$jobID.$t}}
</div>