property angularjs angularjs-ng-repeat angularjs-filter

angularjs - property - ng-repeat filter en boolean



object filter angular (5)

Estoy tratando de filtrar en un valor booleano en una repetición ng.

Lista de usuarios no registrados:

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

Lista de usuarios registrados:

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

¿Hay una buena manera de filtrar en base a registrado y!


Leve modificación a la respuesta de Websirnik, esto permite cualquier nombre de columna para el conjunto de datos:

.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; }; }])

Margen:

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


Cree un método en el controlador que devuelva verdadero o falso según la lógica que necesita y especifique esa función en el filtro.

Algo como esto:

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


filtrar por expresión 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/


Tenía la misma pregunta. La solución Alfrescian no funcionó para mí en Angular 1.1.5.

Encontrado este violín: 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; }; }])

Debería ajustar el código del filtro de acuerdo con su campo.


En caso de que un elemento no tenga un conjunto de propiedades booleanas, puede encontrar el elemento con una propiedad no configurada en verdadero usando ''!'' con citas filtro ex: {propiedad: ''!'' + verdadero}.

Ejemplo:

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

Para obtener usuarios no registrados, filtra:

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