是否可以排除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提要。
答案 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>