配列がある場合:
$scope.letters =
[{"id":"a"},
{"id":"b"},
{"id":"c"}];
そしてもう一つの配列
$scope.filterBy = ["b","c","d"];
そして、$filterBy に表示される項目のみで $scope.letters をフィルターする ng-repeat を用意したいと思います。
次のようなことができるようになりたいと思っています:
<span ng-repeat="{{letter in letters|filter: letter.id in filterBy }} > {{letter.id}} </span>
そして、b、cを印刷します
これは本当に愚かな例だとはわかっていますが、別の配列オブジェクトの内容に基づいて angular.js 式をフィルターする方法はありますか?
ベストアンサー1
アップデート
以下は、Angular アプリケーション内でこのフィルターを簡単に実装するための Angular モジュール (@InviS の回答に基づく) です。フィルター-inArrayFilter
@InviS の回答に基づいた角度フィルターのアプローチは次のとおりです。
フィルターは次のようになります。
.filter('inArray', function($filter){
return function(list, arrayFilter, element){
if(arrayFilter){
return $filter("filter")(list, function(listItem){
return arrayFilter.indexOf(listItem[element]) != -1;
});
}
};
});
どこリストフィルタリングするリストです(このパラメータはAngularによってデフォルトで設定されます)。配列フィルターフィルターとして使用している配列であり、要素リスト内でフィルタリングするプロパティの名前です。
このフィルターを使用するには、ng-repeat を次のように使用します。
<div ng-repeat='letter in letters | inArray:filterBy:"id"'>{{letter.id}}</div>
どこ配列内フィルターですフィルター (このフィルターの最初の引数)マッチングする配列であり、「ID」 (2番目の引数)配列と一致させたいリストの要素です。
これを試すことができますライブ例角度フィルターアプローチを使用します。