2016-03-31 10 views
0

オブジェクトからのデータを出力する単純なng-repeatがビュー内にあります。私は、印刷は、次のようになりますよ角1:オブジェクトのプロパティに応じてng-repeat出力をフィルタします。

<div 
    ng-repeat="item in toDoItems | 
       orderBy: 'createdAt' 
       track by item.createdAt" 
    > 
    <b>Content:</b> {{item.content}} 
    </div> 

オブジェクト:

 { 
     "content" : "some content", 
     "createdAt" : "1459401001460", 
     "completed" : false 
     }, 
     { 
     "content" : "some content", 
     "createdAt" : "1459401001325", 
     "completed" : true 
     } 

は私だけ"completed" properyの値falseを持っているアイテムを印刷したいです。私はこれを試してみましたが、それは私にエラー与えるだろう

:このためng-repeat only objects with specific property value - custom filter?

+0

だけ 'NG-show'を使用:)下記の私の答え – manish

答えて

1

あなたは、フィルタのこのフォーマットを使用することができます。

var myapp = angular.module('app', []); 
 
myapp.controller('Main', function ($scope) { 
 
    $scope.data =[ 
 
     { 
 
     "content" : "some content", 
 
     "createdAt" : "1459401001460", 
 
     "completed" : false 
 
     }, 
 
     { 
 
     "content" : "some content", 
 
     "createdAt" : "1459401001325", 
 
     "completed" : true 
 
     }, 
 
     { 
 
     "content" : "some content2", 
 
     "createdAt" : "1459401001460", 
 
     "completed" : false 
 
     }, 
 
     { 
 
     "content" : "some content", 
 
     "createdAt" : "1459401001325", 
 
     "completed" : true 
 
     }, 
 
     { 
 
     "content" : "some content3", 
 
     "createdAt" : "1459401001460", 
 
     "completed" : false 
 
     }, 
 
     { 
 
     "content" : "some content", 
 
     "createdAt" : "1459401001325", 
 
     "completed" : true 
 
     } 
 
]; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app = "app"> 
 
    <div ng-controller="Main"> 
 

 
<div > 
 
    <table class="table table-bordered"> 
 
     <tr ng-repeat="d in data | filter: {completed: false }"> 
 
      <td>{{d.content}}</td> 
 
     </tr> 
 
    </table> 
 
</div> 
 
    </div> 
 
</div>

0
<b ng-show='item.completed==false'>Content:</b> 
<span ng-show='item.completed==false'>{{item.content}}</span> 
+0

は、それがNGリピート内でフィルタを行うことができますか? – Kunok

+0

はい、それはカスタムの 'filter'を作成する必要があります。完了しました – manish

0

使用angular filter pluginを、のような

の下にあなたのコードを変更して注入する

<div 
     ng-repeat="item in toDoItems | filterBy: ['completed']: true | 
        orderBy: 'createdAt' 
        track by item.createdAt" 
     > 
     <b>Content:</b> {{item.content}} 
     </div> 
1

このカスタムフィルタ

を使用します
app.filter('myFilter', function() { 
    return function (items) { 
     if (!items) { 
      return true; 
     } 
     if (items.length == 0) { 
      return items; 
     } 
     var newItems = []; 
     angular.forEach(items, function(item, index){ 
      if(item.completed==true || item.completed=='true'){ 
       newItems.push(item) 
      } 
     }) 
     return newItems ; 
    }; 
}); 

そして、あなたのHTMLは次のとおりです。

<div ng-repeat="item in toDoItems | myFilter track by $index"> 
     <b>Content:</b> {{item.content}} 
    </div> 
+0

カスタムフィルタファイルを置くのに良い場所は何ですか? – Kunok

+1

私はアプリケーションのパフォーマンスについて多くの作業をしました。 ** Dev環境**では、すべてのJSファイルをどこに置いても、作成するファイルの数は関係ありません。私は一般にすべてのフィルターをモジュールレベルで別々のファイルに置きます。しかし**実稼働環境**では、HTTP要求を最小限に抑えようとします。そのためには、JSコードを最小化し、すべてのJSコードを最大2〜3ファイルに配置する必要があります。 –

関連する問題