私はJSON形式の配列(プロジェクト)を持っています。対象プロジェクトは、フィールドがあります。オブジェクトの角フィルタ複数の文字列
"name":"pname",
"id":"1",
"keywords":"aab bb cc"
私は入力フォームng-model="searchText"
にフィルタを接続して検索するために、複数の文字列を使用したい
<div ng-repeat="p in projects | filter : searchText">
{{p.name}}, {{p.id}} etc.
</div>
を使用してdivタグでこれらのオブジェクトを表示します。たとえば、検索: "pname aa bb"とすると上記のプロジェクトが表示されます。
私はカスタムフィルタを使用してsearchTextを分割する必要があることを知っています。しかし、文字列配列をフィルタリングする方法は、JSONオブジェクトでは機能しないようです。違いはなんですか?
単純な文字列配列の試み。 ['aab', 'bb', 'cc']
オブジェクト配列のために働かなかったこと:
.filter("myFilter", function(){
return function(input, searchText){
var returnArray = [];
var searchTextSplit = searchText.toLowerCase().split(' ');
for(var x = 0; x < input.length; x++){
var count = 0;
for(var y = 0; y < searchTextSplit.length; y++){
if(input[x].toLowerCase().indexOf(searchTextSplit[y]) !== -1){
count++;
}
}
if(count == searchTextSplit.length){
returnArray.push(input[x]);
}
}
return returnArray;
}
});
は、どのように私はそれがオブジェクトに対して動作させるのですか?
プロパティキーを検索対象から除外する方法はありますか?オブジェクトは実際にはSQLクエリのJSON_encodeオブジェクトで、キーの1つはBLOBです。ブロブを含めると、フィルタが誤動作します。 (ng-repeat:dupes) – sandboxj
もちろんです。オブジェクトをトラバースするために使用する関数を変更して、一連のプロパティキーを受け入れるように変更し、トラバース中にそれらを無視してスキップします(更新された['Plunker'](http://plnkr.co/edit/U1TOccm3pURetRTUul12?p=preview) )。しかし、 'ng-repeat'の重複エラーは、プロパティキーを除外することには関係していないと思われます。 Angularがあなたのオブジェクトをアイデンティティで区別できない場合、 'ng-repeat'に' track by $ index'を追加することができます(この[documentation](https://docs.angularjs.org/api/ng/)参照)。ディレクティブ/ ngRepeat#トラッキングと重複)を参照してください)。 – miqid