2013-07-15 7 views
54

ng-repeatのブール値をフィルタリングしようとしています。未登録のユーザーのブール値のng-repeatフィルタ

リスト:登録ユーザーの

<h3>Unregistered Users</h3> 
    <div ng-repeat="user in users | filter:!user.registered"> 
     <div class="row-fluid"> 
     <div class="span2"> 
      {{user.name}} 
     </div> 
     </div> 
    </div> 

がList:!

<h3>Registered Users</h3> 
    <div ng-repeat="user in users | filter:user.registered"> 
     <div class="row-fluid"> 
     <div class="span2"> 
      {{user.name}} 
     </div> 
     </div> 
    </div> 

登録され、登録に基づいてフィルタリングするための良い方法はあります。

答えて

108

フィルタ:

<h3>Unregistered Users</h3> 
<div ng-repeat="user in users | filter:{registered:false}"> 
    <div class="row-fluid"> 
    <div class="span2"> 
     {{user.name}} 
    </div> 
    </div> 
</div> 

JSFiddle:http://jsfiddle.net/alfrescian/9ytDN/

+23

これをAngularJS 1.2で試してみると、偽の式は引用すると正しく評価されます:filter:{registered: 'false'} – karlgold

+0

それはうまくいかないようです1.2.2(文字列化されているかどうか)で、誰でも確認できますか?編集:私の問題は、オブジェクトの反復でフィルタにあります – Guillaume86

+1

入れ子オブジェクトについては、構文が1.2から1.3に変更されました。この回答を参照してください。http://stackoverflow.com/a/28160037/595152 –

13

コントローラに必要なロジックに基づいて真または偽を返すメソッドを作成し、その関数をフィルタに指定します。

このような何か:OBJ発現による

$scope.isRegistered = function(item) { 
    return item.registered; 
}; 

<h3>Unregistered Users</h3> 
<div ng-repeat="user in users | filter:!isRegistered "> 
    <div class="row-fluid"> 
    <div class="span2"> 
     {{user.name}} 
    </div> 
    </div> 
</div> 
+0

から来るべき:

$scope.users = [ { name : 'user1 (registered)', registered : true }, { name : 'user2 (unregistered)' }, { name : 'user3 (registered)', registered : true }, { name : 'user4 (unregistered)' } 

が未登録のユーザフィルタを取得するには? –

+0

@ZJRollyson itemはフィルタメソッド 'idRegirstered(item)'の引数です。フィルタリングは、 'user'オブジェクトをフィルタメソッドに渡し、ブール値の戻り値を評価することによって機能します。 – Daniel

+2

フィルタメソッドを反転することはできません。 '$ scope.isUnregistered = function(item){return!item.registered;}このようにフィルタメソッド内で反転を行わなければなりません。 {filter:isUnregistered} – awe

3

は、同じ質問を持っていました。 Alfrescianの解決策は、角度1.1.5で私のために働かなかった。あなたがあなたのフィールドに応じてフィルタのコードを調整する必要があるだろうhttp://jsfiddle.net/buehler/HCjrQ/

.filter('onlyBooleanValueFilter', [function(){ 
    return function(input, param){ 
     var ret = []; 
     if(!angular.isDefined(param)) param = true; 
     angular.forEach(input, function(v){ 
      // 'active' is a hard-coded field name 
      if(angular.isDefined(v.active) && v.active === param){ 
       ret.push(v); 
      } 
     }); 
     return ret; 
    }; 
}]) 

はこのバイオリンを見つけました。

1

Websirnikの答えにわずかな変更には、これはデータセットの任意の列名を許可します。

は、マークアップ:

<div repeat="row in your.dataset | onlyBooleanValueFilter: 'yourColumn' : true"> 
    ...your stuff here.... 
</div> 
+0

良いお話Juzzz、ありがとうございます。 –

5

項目がブールプロパティが設定されていない場合は、あなたが見つけることができます'!'を使用してプロパティがtrueに設定されていないアイテム引用符で。 e.x.フィルタ:{プロパティ: '!' + true}

例: `はずitem`さ

<h3>Unregistered Users</h3> 
<div ng-repeat="user in users | filter:{registered:'!'+true}"> 
    <div class="row-fluid"> 
     <div class="span2"> 
      {{user.name}} 
     </div> 
     </div> 
    </div>