2016-11-11 4 views
1

ng-repeatタグでフィルタリングする名前と値の要素の配列があります。私の配列は、そのような要素があります。ng repeatで要素をフィルタリングする方法

$scope.extensions = [{ 
    name: "extension1.00", 
    value: 1234587 
}, { 
    name: "extension1.02", 
    value: 665873698742136544 
}, { 
    name: "extension2.00", 
    value: 11 
}........ //other elements 
] 

そして、私のNGリピートタグは以下の通りです:

<div ng-repeat = "extension in (extensions | filter : myFilter(extension.name) | orderBy: 'name') "> 

そして、何私がやりたいことはある、名前はdoesnの要素だけを表示するには、カスタムフィルタを書くために「.00」で終わります。上の例では、「extension1.02」だけを表示し、他の2つは表示しないようにしてください。ここでは、最後に... を

$scope.myFilter = function(name) { 
    return function(item) { 
    var result = true; 
    if (item === "extension1.00") { 
     return false; 
    } else { 
    } 

    return result; 
    }; 
}; 

しかし、それは全く動作しませんでした:

だから、私はちょうど最初の要素(「extension1.00」)を表示しないように、単純なフィルタを書き込もうとしました私のコードです: https://plnkr.co/edit/8oMCgFJhDaFyXfnz2OzU?p=preview

私は自分のフィルターを書こうとしましたが、私はこれをどのように達成できるか考えていません。 そのフィルタを書いてもらえますか?ありがとうございました!

+0

で作業することができもう少しカスタムフィルタを示し、 'myFilterを(のためのコードを記載してください) 」と言いました。 – Soviut

+0

'function myFilter(name){return name.substr(-3)!= '.00'; } ' – Gavin

+0

@Soviutフィルターを今追加します! – salamanka44

答えて

1

私はここで働い例を作った - >click here

あなたがやった最大の過ちを、コントローラ内部のフィルタ機能を保持することでした。

マイフィルタ機能:

app.filter('myFilter', function(){ 
return function(items, str){ 
    var filtered = []; 
    angular.forEach(items, function(item){ 
    if (item.name.substr(item.name.lastIndexOf('.')+1) !== str){ 
    filtered.push(item); 
    } 
}); 
return filtered;}}); 

codepenへのリンクをチェックアウトが...それはあなたが:)

+0

私の考えとよく似ています。これは理想的なコード作成方法です。 –

1

<div ng-repeat = "extension in extensions | filter : {name: '!.00'} | orderBy: 'name' "> 

でコード

<div ng-repeat = "extension in (extensions | filter : myFilter(extension.name) | orderBy: 'name') "> 

次交換しても、あなたが今

次のコードは、あなたの要件を満たすということは必要ありません、あなたのコントローラからmyFilterをメソッドを削除してください

コントローラのmyFilterメソッドをfollowiで変更するNGコード

$scope.myFilter = function(extension) { 
var extArr = []; 
extArr = extension.name.split("."); 

if(parseInt(extArr[1]) === 0){ 
    return false; 
}else{ 
return true; 
}}; 

そしてHTMLで、私は、この特定のtask.Asあなたのアイデアの拡張を行うための標準的なフィルタ特性を使用することをお勧めしません。次のコード

<div ng-repeat = "extension in extensions | filter : myFilter | orderBy: 'name' "> 
+0

それは私より良いアイデアですが、完全には機能しません。たとえば、「extension1.002」を持っている場合は、それも削除されます。あなたは名前がシーケンス ".00"を含んでいないかどうかだけチェックしていますが、削除したいのはそのシーケンスで終了するものです – salamanka44

+0

実際にあなたの質問によると、 ".00 "部分のみ。 –

+0

それで、どうすればいいのか教えていただけますか? – salamanka44

0

と交換してください私は書くことをお勧めしますそのためのカスタムフィルタ。ここで

は、次のように行うのNGリピートディレクティブを設定するには、カスタムフィルタ

angular.module("myApp",[]).filter("myFilter", function() { 
      return function (data) { 
       var myValues = []; 
       for (var i = 0; i < data.length; i++) { 
        if (!(data[i]["name"].endsWith(".00"))) { 

         myValues.push(data[i]); 
        } 
       } 
       return myValues; 
      } 
     }); 

のサンプルコードスニペットです。

<div ng-repeat="extension in extensions | mySampleFilter | orderBy: 'name'"> 
    {{extension.name}} 
</div> 
関連する問題