2

配列に文字列とフォローアップが含まれているかどうかを確認したい。indexOf() は厳密であるため、オプションではありません。

ここにプランカー

説明されている問題は app.filter('myOtherFilter', function()

app.filter('myOtherFilter', function() {
    return function(data, values) {
      var vs = [];
      angular.forEach(values, function(item){
        if(!!item.truth){
          vs.push(item.value);
        }
      });

      if(vs.length === 0) return data;

      var result = [];
      angular.forEach(data, function(item){
        if(vs.toString().search(item.name) >= 0) {
          result.push(item);
        }
      });
      return result;
    }
  });

これは正しいですか、エラーは別の場所にありますか?

4

2 に答える 2

2
angular.forEach(data, function(item){   
    for(var i = 0; i < vs.length; i++){
        if(item.name.search(vs[i]) >= 0) {
            result.push(item);
        }
    }
});
于 2013-09-05T07:56:50.727 に答える
0

filterAngularフィルターをいつでも抽出できます。これは配列を受け取りますが、さまざまな型を適切に処理します。一般的な考え方は次のとおりです。

app.filter('filter', function($filter) {
    var filterFilter = $filter('filter');

    function find(item, query) {
        return filterFilter([item], query).length > 0;
    }

    return function(data, values) {
        var result = [];

        angular.forEach(data, function(item) {
            for(var i = 0; i < values.length; i++) {
                if(find(item, values[i])) {
                    result.push(item);
                    break;
                }
            }
        });

        return result;
    };
}

});

渡すデータの構造を変更する必要があります。 のリストではなく、値のリストを渡します{truth: true}。このソリューションにより、Angular の「フィルター」フィルターの既存の機能を活用できます。

于 2013-09-05T10:10:59.597 に答える