1. ホーム
  2. arrays

[解決済み] AngularJSカスタムフィルタ機能

2023-03-11 20:38:21

質問

コントローラ内で、オブジェクトの配列にフィルタをかけたいと考えています。これらのオブジェクトはそれぞれ、リストと同様に文字列を含むことができるマップです。

私は $filter('filter')(array, function) 形式を使用してみましたが、関数内で配列の個々の要素にアクセスする方法がわかりません。以下は、私が欲しいものを示すためのスニペットです。

$filter('filter')(array, function() {
  return criteriaMatch(item, criteria);
});

そして、その中の criteriaMatch() で、個々のプロパティが一致するかどうかをチェックします。

var criteriaMatch = function(item, criteria) {
  // go thro each individual property in the item and criteria
  // and check if they are equal
}

これらを全てコントローラで行い、リストのリストをコンパイルしてスコープに設定する必要があります。そのため $filter('filter') へのアクセスはこの方法だけです。私がネットで見つけたすべての例は、関数内で静的な基準検索を行い、基準オブジェクトを渡して配列の各項目に対してテストすることはありません。

どのように解決するのですか?

このように使用することができます。 http://plnkr.co/edit/vtNjEgmpItqxX5fdwtPi?p=preview

見つけたような。 filter は述語関数を受け付けます。 を配列から受け取ることができます。 ですから、あなたはただ、与えられた criteria .

この例では criteriaMatch は、与えられた述語にマッチする述語を返す関数です。 関数で、与えられた criteria .

のテンプレートを使用します。

<div ng-repeat="item in items | filter:criteriaMatch(criteria)">
  {{ item }}
</div>

のスコープを使用します。

$scope.criteriaMatch = function( criteria ) {
  return function( item ) {
    return item.name === criteria.name;
  };
};