布尔型的ng-repeatfilter
我正在尝试在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>
有没有一个很好的方法来过滤基于注册和!注册。
按obj过滤expression式:
<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/
在控制器中创build一个方法,根据您需要的逻辑返回true或false,并在filter中指定该函数。
像这样的东西:
$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>
如果某个项目没有设置布尔属性,则可以通过使用'!'来查找属性未设置为true的项目。 用引号。 filter:{property:'!'+ true}。
例:
$scope.users = [ { name : 'user1 (registered)', registered : true }, { name : 'user2 (unregistered)' }, { name : 'user3 (registered)', registered : true }, { name : 'user4 (unregistered)' }
要获取未注册的用户filter:
<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>
有同样的问题。 Alfrescian解决scheme在Angular 1.1.5上不适合我。
find这个小提琴: 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; }; }])
您需要根据您的字段调整filter的代码。
稍微修改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>