J'ai l'objet utilisateur défini comme ci-dessous.
$scope.user = [{id: 1, friends:
[
{name: 'John', age: 21, sex: 'M'},
{name: 'Brad', age: 32, sex: 'M'}
]
}]
J'ai le code suivant:
<input type="text" ng-model="searchText">
<div ng-repeat="friend in user.friends | filter:searchText">
{{friend.name}} {{friend.age}}
</div>
Ici, chaque fois que je cherche, j'obtiens des résultats pour le nom, l'âge et le sexe. Mais je veux chercher seulement le nom et l'âge et je ne veux pas que le sexe soit consultable. Quelqu'un peut-il m'aider avec comment je peux y parvenir?
Je ne sais pas si c'est ce que vous recherchez. Si vous souhaitez qu'un seul champ de saisie corresponde à plusieurs propriétés, vous devez passer une fonction de filtrage à 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());
};
Voici un exemple de violon http://jsfiddle.net/fredrik/26fZb/1/
Vous pouvez passer un objet comme deuxième paramètre pour y parvenir si vous pouvez avoir deux champs de recherche.
<div ng-repeat="friend in user.friends | filter:{name:searchNameText, age:searchAgeText}">
Sinon, vous devrez écrire un filtre personnalisé pour utiliser le même champ pour les deux, ou passer une fonction de filtre personnalisé en tant que troisième paramètre décrit dans la documentation.
Ce n’est pas le moyen le plus propre d’accomplir ce que vous voulez, mais c’est le moyen le plus simple d’obtenir un filtre OR à l’aide du filtre ng-repeat standard.
Manette:
$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>
"ami dans user.friends | json | filter: {quelque chose: quelque chose de texte}"
http://docs-angularjs-org-dev.appspot.com/api/ng.filter:json
Une autre approche possible consiste à créer un champ agrégé contenant les valeurs de tous les champs que vous souhaitez filtrer sur concaténés et filtrer uniquement sur celui-ci.