所以如果我有一个数组:
$scope.letters =
[{"id":"a"},
{"id":"b"},
{"id":"c"}];
还有另一个数组
$scope.filterBy = ["b","c","d"];
我想要一些 ng-repeat 来仅通过 $filterBy 中出现的项目来过滤 $scope.letters。
我希望能够做一些事情来达到以下效果:
<span ng-repeat="{{letter in letters|filter: letter.id in filterBy }} > {{letter.id}} </span>
并打印 b,c
我知道这是一个非常愚蠢的例子,但是有没有办法根据另一个数组对象的内容过滤 angular.js 表达式?
Update
这是一个角度模块(基于@InviS答案),可以在您的角度应用程序中轻松实现此过滤器:过滤器-inArrayFilter http://cyberdelphos.github.io/angular-inarray-filter/
这是基于 @InviS 答案的角度过滤器方法:
过滤器应该是这样的:
.filter('inArray', function($filter){
return function(list, arrayFilter, element){
if(arrayFilter){
return $filter("filter")(list, function(listItem){
return arrayFilter.indexOf(listItem[element]) != -1;
});
}
};
});
where list是您要过滤的列表(此参数默认由 Angular 设置),数组过滤器是您用作过滤器的数组,并且element是要在列表中过滤的属性的名称。
要使用此过滤器,请使用 ng-repeat 作为:
<div ng-repeat='letter in letters | inArray:filterBy:"id"'>{{letter.id}}</div>
where inArray是过滤器,filterBy (此过滤器的第一个参数)是你要匹配的数组,并且"id" (第二个参数)是要与数组匹配的列表元素。
你可以试试这个活生生的例子 http://jsbin.com/owIXEPE/2/edit使用角度过滤器方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)