1

リピーターエレメントから隠す小さなフィルターを作成しようとしています。angularjs - リピーターから隠れるフィルター

のは、私の範囲であることを言ってみましょう:

$scope.test = [ 
    {id: 1,name: "Test number 1"}, 
    {id: 2,name: "Test number 2"}, 
    {id: 3,name: "Test number 3"}, 
    {id: 4,name: "Test number 4"}, 
    {id: 5,name: "Test number 5"}, 
    {id: 6,name: "Test number 6"}, 
    {id: 7,name: "Test number 7"}, 
    {id: 8,name: "Test number 8"}, 
    {id: 9,name: "Test number 9"}, 
    {id: 10,name: "Test number 10"} 
] 

が私のリピータで、私はこのような何かをやっている:私は私のフィルターを書き始めたが、私は行き詰まって

<div ng-repeat="t in test| hide:[1,6]"></div> 

。これは私がこれまで持っているものです:私はフィルターをどうしようとしています何

filter('hideIDs', function() { 
    newArray= []; 

    function(zone, IDS) { 
    var containsObject, newArray; 
    containsObject = function(obj, list) { 
     var i; 
     i = void 0; 
     i = 0; 
     while (i < list.length) { 
     if (list[i] === obj) { 
      return true; 
     } 
     i++; 
     } 
     return false; 
    }; 

    angular.forEach(IDS, function(hide) { 
     return angular.forEach(test, function(t) { 
     if (t.id === hide) { 
      return 
     } else { 
      if (containsObject(t, newArray)) { 
      return 
      } else { 
      newArray.push(t); 
      } 
     } 
     }); 
    }); 
    return newArray; 
    }; 
}); 

は次のとおりです。

t.idを非表示にする必要がある場合は、チェックし、そうであれば、returnnewArray

にそれを押さず

私が持っている問題がある:非表示に

idは最初のループ上の1で、その後、6がプッシュされます

012第2のループhovewerに

は、非表示にIDが6であり、次いで1

をプッシュ取得し、私はとにかくそれらの両方を有する終わります。

提案?

あなたは、効率的な角度の方法でこれをどう実現するのでしょうか?

ありがとうございました

答えて

2

どうやってですか? https://plnkr.co/edit/hPiOnq7jp4kIP6h8Ox1d?p=preview

<div ng-init="data = [{id: 1}, {id: 2}, {id: 3}, {id: 4}, {id: 5}]"> 
    <div ng-repeat="test in data | hideByIds:[2, 4]"> 
    {{ test.id }} 
    </div> 
</div> 

あなたは、この場合にはfilterフィルタすることができますどのような再利用する必要があります。

var app = angular.module('app', []); 

app.filter('hideByIds', function($filter) { 
    return function(input, ids) { 
    return $filter('filter')(input, function(it) { 
     return ids.indexOf(it.id) == -1; 
    }); 
    } 
}); 

代替がスコープに述語関数を指定することで、単純で、フィルタに渡しますテンプレート。

+0

うん、それはうまく動作する。提案に感謝 – Nick

+0

このスティールの書き込みは「なぜ私の角型アプリケーションが遅すぎるのですか?」という結果になります。 –

+0

@PetrAveryanovあなたのコメントをもう少し詳しく説明できますか?私は実際に私のアプリが遅くなってくるのを心配しています – Nick

関連する問題