61

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>

登録ユーザー一覧:

    <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>

登録済みおよび !登録済みに基づいてフィルタリングする良い方法はありますか。

4

5 に答える 5

120

obj 式でフィルタ:

<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/

于 2013-07-15T14:40:30.767 に答える
13

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

このようなもの:

$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>
于 2013-07-15T14:11:03.117 に答える
3

同じ質問がありました。アルフレシアンのソリューションは、Angular 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;
    };
}])

フィールドに応じてフィルターのコードを調整する必要があります。

于 2013-11-13T13:55:08.457 に答える
1

Websirnik の回答を少し変更すると、データセットの任意の列名が許可されます。

.filter('onlyBooleanValueFilter', [function () {
    return function (input, column, trueOrFalse) {
        var ret = [];

        if (!angular.isDefined(trueOrFalse)) {
            trueOrFalse = false;
        }

        angular.forEach(input, function (v) {
            if (angular.isDefined(v[column]) && v[column] === trueOrFalse) {
                ret.push(v);
            }
        });

        return ret;
    };
}])

マークアップ:

<div repeat="row in your.dataset | onlyBooleanValueFilter: 'yourColumn' : true"> 
     ...your stuff here....
</div>
于 2015-12-17T17:38:36.410 に答える