Angularjs 布尔型上的ng重复过滤器

Angularjs 布尔型上的ng重复过滤器,angularjs,angularjs-ng-repeat,angularjs-filter,Angularjs,Angularjs Ng Repeat,Angularjs Filter,我试图在ng重复中过滤布尔值 未注册用户列表: <h3>Unregistered Users</h3> <div ng-repeat="user in users | filter:!user.registered"> <div class="row-fluid"> <div class="span2"> {{user.name}} </div&g

我试图在ng重复中过滤布尔值

未注册用户列表:

    <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>
未注册用户
{{user.name}
注册用户名单:

    <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>
注册用户
{{user.name}

有没有一个好的方法来过滤的基础上注册和!已注册。

在控制器中创建一个方法,根据需要的逻辑返回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>
$scope.isRegistered=功能(项){
已注册的退货项目;
};
未注册用户
{{user.name}

按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>
未注册用户
{{user.name}

JSFiddle:

也有同样的问题。在Angular 1.1.5上,一个解决方案对我不起作用

找到这把小提琴:


您需要根据您的字段调整过滤器的代码。

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

…你的东西在这里。。。。

如果项目没有设置布尔属性,则可以使用“!”找到属性未设置为true的项目引用。e、 筛选器:{property:'!'+true}

例如:

$scope.users = [
        {
            name : 'user1 (registered)',
            registered : true
        },
        {
            name : 'user2 (unregistered)'
        },
        {
            name : 'user3 (registered)',
            registered : true
        },
         {
            name : 'user4 (unregistered)'
        }
要获取未注册用户筛选器,请执行以下操作:

<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>
未注册用户
{{user.name}

当我尝试使用AngularJS 1.2时,如果我引用false表达式,则它的计算结果是正确的:filter:{registered:'false}看起来它在1.2.2中根本不起作用(Stringized或not),有人可以确认吗?编辑:没关系,我的问题是在对象迭代上筛选对于嵌套对象,语法从1.2更改为1.3,请参见此答案
item
应该来自哪里?@ZJRollyson item是筛选方法
idRegirstered(item)
的参数。过滤通过将
user
对象传递给过滤方法并计算布尔返回值来工作。不可能反转过滤方法。您必须在筛选器方法内部执行如下反转:
$scope.isUnregistered=function(item){return!item.registered;}
并像这样使用它
过滤器:isUnregistered