95 votes

Filtre multiple AngularJS avec fonction de filtre personnalisée

J'essaie de filtrer la liste avec des filtres multiples + une fonction de filtre personnalisée.

L'exemple original de jsfiddle est le suivant http://jsfiddle.net/ed9A2/1/ mais maintenant je veux changer la façon dont l'âge est filtré.

Je veux ajouter un filtre personnalisé pour que âge il filtre en fonction de deux valeurs d'entrée qui sont âge minimum y âge max. , (entre l'âge) .

Après avoir examiné le doc. j'ai trouvé des personnes ayant des questions similaires et un utilisateur Mark Rajcok a répondu http://docs.angularjs.org/api/ng.filter:filter#comment-648569667 semble bon et devrait fonctionner. Mais j'ai des difficultés à l'appliquer dans mes codes, notamment parce que j'ai d'autres filtres multiples.

Je suis très novice en AngularJS :(

Ma méthode éprouvée et qui ne fonctionne PAS est la suivante http://jsfiddle.net/ed9A2/20/

Un copier-coller de mes codes qui ne fonctionnent PAS se trouve ici.

Voir

<div ng-app ng-controller="MainController">
<table class="fancyTable">
    <tr>
        <th>Player id</th>
        <th>Player name</th>
        <th>Age</th>
    </tr>
    <tr>
        <td><input ng-model="player_id" /></td>
        <td><input ng-model="player_name" /></td>
        <td>
            Min Age:<input ng-model="min_age" />
            Max Age:<input ng-model="max_age" />
        </td>
    </tr>
    <tr ng-repeat="player in players | filter:{id: player_id, name:player_name, age:ageFilter}">
        <td>{{player.id}}</td>
        <td>{{player.name}}</td>
        <td>{{player.age}}</td>
    </tr>
</table>

Contrôleur

function MainController($scope) {

$scope.player_id = "";
$scope.player_name = "";
$scope.player_age = "";
$scope.min_age = 0;
$scope.max_age = 999999999;

$scope.ageFilter = function(player) {
    return ( player > $scope.min_age && player.age < $scope.max_age);
}

$scope.players = [
        {"name": "Rod Laver",
            "id": "rod",
            "date": "1938/8/9",
            "imageUrl": "img/rod-laver.gif",
            "age": 75},
        {"name": "Boris Becker", 
            "id": "borix",
            "date": "1967/11/22",
            "imageUrl": "img/boris-becker.gif",
            "age": 45},
        {"name": "John McEnroe",
            "id": "mcenroe",
            "date": "1959/2/16",
            "imageUrl": "img/john-mc-enroe.gif",
            "age": 54},
        {"name": "Rafa Nadal",
            "id": "nadal",
            "date": "1986/5/24",
            "imageUrl": "img/ndl.jpg",
            "age": 27}
    ]
}

200voto

zsong Points 20492

Essayez ça :

<tr ng-repeat="player in players | filter:{id: player_id, name:player_name} | filter:ageFilter">

$scope.ageFilter = function (player) {
    return (player.age > $scope.min_age && player.age < $scope.max_age);
}

8voto

J'espère que la réponse ci-dessous dans ce lien vous aidera, Filtre à valeurs multiples

Et jetez un coup d'oeil dans le violon avec l'exemple

arrayOfObjectswithKeys | filterMultiple:{key1:['value1','value2','value3',...etc],key2:'value4',key3:[value5,value6,...etc]}

violon

0voto

Shyamal Patel Points 43

Dans le fichier de vue (HTML ou EJS)

<div ng-repeat="item in vm.itemList  | filter: myFilter > </div>

et Dans le contrôleur

$scope.myFilter = function(item) {
return (item.propertyA === 'value' || item.propertyA === 'value');
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X