我需要过滤ng-repeat,如果元素存在于“suggest”数组中(通过id字段),则会爆炸“general”数组中的元素。
$scope.general= [{id: 21323, name: 'alex'}, {id: 8787, name: 'maria'}, {id: 8787, name: 'artem'}];
$scope.suggest = [{id: 21323, name: 'alex'}, {id: 8787, name: 'maria'}];
<div ng-repeat="elem in general">{{elem.name}}</div>
答案 0 :(得分:2)
您应该创建自己的custom filter并且您可能希望使用Array.prototype.filter。
你说你想要通过财产id
排除。以下填充程序可选择允许指定属性。如果未指定该属性,则对象将被strict equality(与===或三重等于运算符使用的方法相同)排除。
angular.module('myFilters', [])
.filter('exclude', function() {
return function(input, exclude, prop) {
if (!angular.isArray(input))
return input;
if (!angular.isArray(exclude))
exclude = [];
if (prop) {
exclude = exclude.map(function byProp(item) {
return item[prop];
});
}
return input.filter(function byExclude(item) {
return exclude.indexOf(prop ? item[prop] : item) === -1;
});
};
});
在html中使用此过滤器:
<div ng-repeat="elem in general | exclude:suggest:'id'">{{elem.name}}</div>
以下是jsfiddle的示例: https://jsfiddle.net/6ov1sjfb/
请注意,在你的问题中,artem的id与玛丽亚相匹配,因此artem和maria都被过滤了。我在plunker中更改了artem的id,以显示过滤器的工作原理。
答案 1 :(得分:0)
试试这个:
var myApp = angular.module('myApp', []);
function MyCtrl($scope) {
$scope.general = [{
id: 21323,
name: 'alex'
}, {
id: 8787,
name: 'maria'
}, {
id: 8787,
name: 'artem'
}];
$scope.suggest = [{
id: 21323,
name: 'alex'
}, {
id: 8787,
name: 'maria'
}];
$scope.filteredArray = function () {
return $scope.general.filter(function (letter) {
for (i = 0; i < $scope.suggest.length; i++) {
return $scope.suggest[i].id !== letter.id
}
});
};
}
和
<div ng-repeat="elem in filteredArray(letters)">{{elem.name}}</div>
查看小提琴:http://jsfiddle.net/o2er6msv/
注意:请chk你的id,它们是重复的