source ngsrc angularjs javascript-framework

ngsrc - AngularJS filtra solo en ciertos objetos



ngsrc angular 7 (5)

"amigo en user.friends | json | filter: {algo: somethingtext}"

http://docs-angularjs-org-dev.appspot.com/api/ng.filter:json

Tengo el objeto de usuario definido como a continuación.

$scope.user = [{id: 1, friends: [ {name: ''John'', age: 21, sex: ''M''}, {name: ''Brad'', age: 32, sex: ''M''} ] }]

Tengo el siguiente código:

<input type="text" ng-model="searchText"> <div ng-repeat="friend in user.friends | filter:searchText"> {{friend.name}} {{friend.age}} </div>

Aquí cada vez que busco, obtengo resultados por nombre, edad y sexo. Pero quiero buscar solo el nombre y la edad y no quiero que se pueda buscar sexo. ¿Alguien puede ayudarme con cómo puedo lograr esto?


Esta no es la forma más limpia de lograr lo que desea, pero es la forma más sencilla de lograr un filtro OR utilizando el filtro estándar de repetición ng.

Controlador:

$scope.user = [{id: 1, friends: [ {name: ''John'', age: 21, sex: ''M''}, {name: ''Brad'', age: 32, sex: ''M''} ] }] $scope.buildSearchData = buildSearchData; function buildSearchData(friend){ return friend.name + '' '' + friend.age; }

HTML

<input type="text" ng-model="searchText"> <div ng-repeat="friend in user.friends | filter:{searchData:searchText}" ng-init="friend.searchData = buildSearchData(friend)"> {{friend.name}} {{friend.age}} </div>


No estoy seguro de si esto es lo que buscas. Si desea tener un campo de entrada para que coincida con múltiples propiedades, necesita que se pase una función de filter a filter .

$scope.user = {id: 1, friends: [{name: ''John'', age: 21, sex: ''M''}, {name: ''Brad'', age: 32, sex: ''M''}, {name: ''May'', age: 64, sex: ''F''}]}; $scope.searchFilter = function (obj) { var re = new RegExp($scope.searchText, ''i''); return !$scope.searchText || re.test(obj.name) || re.test(obj.age.toString()); };

Aquí hay un ejemplo de violín http://jsfiddle.net/fredrik/26fZb/1/


Otro enfoque posible es crear un campo agregado que contenga los valores de todos los campos que desea filtrar concatenados y solo filtrar en eso.


Puede pasar un objeto como segundo parámetro para lograr esto si puede tener dos campos de búsqueda

<div ng-repeat="friend in user.friends | filter:{name:searchNameText, age:searchAgeText}">

De lo contrario, deberá escribir un filtro personalizado para usar el mismo campo para ambos, o pasar una función de filtro personalizado como el tercer parámetro que se describe en la documentación.

http://docs.angularjs.org/api/ng.filter:filter