Si j'ai un tableau d'objets et que je souhaite lier le modèle angulaire à une propriété de l'un des éléments en fonction d'un filtre, comment puis-je faire cela? Je peux mieux expliquer avec un exemple concret:
HTML:
<!DOCTYPE html>
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body ng-controller="MyCtrl">
<input ng-model="results.year">
<input ng-model="results.subjects.title | filter:{grade:'C'}">
</body>
</html>
Manette:
function MyCtrl($scope) {
$scope.results = {
year:2013,
subjects:[
{title:'English',grade:'A'},
{title:'Maths',grade:'A'},
{title:'Science',grade:'B'},
{title:'Geography',grade:'C'}
]
};
}
JSBin: http://jsbin.com/adisax/1/edit
Je veux filtrer la deuxième entrée du sujet avec une note «C», mais je ne veux pas lier le modèle à la note ; Je veux le lier au titre de la matière qui a la note «C».
Est-ce possible, et si oui, comment cela se fait-il?
filter:{grade:'!'+'C'}
grade array
? Dans mon cas, je construis mon tableau de notes à partir d'une arborescence et je veux filtrer le résultat pour ceux du tableau.Vous pouvez utiliser le filtre «filtre» de votre contrôleur pour obtenir toutes les notes «C». Obtenir le premier élément du tableau de résultats vous donnera le titre du sujet qui a la note «C».
http://jsbin.com/ewitun/1/edit
La même chose avec l'ES6 ordinaire:
la source
Voici un JSBin modifié avec un exemple de travail:
http://jsbin.com/sezamuja/1/edit
Voici ce que j'ai fait avec les filtres dans l'entrée:
la source
veuillez noter que si vous utilisez $ filter comme ceci:
et vous aviez une autre note pour, Oh je ne sais pas, CC ou AC ou C + ou CCC il les attire. vous devez ajouter une exigence pour une correspondance exacte:
Cela m'a vraiment tué quand je saisissais des détails de commission comme celui-ci:
seulement être appelé pour un bogue parce qu'il tirait l'ID de commission 56 au lieu de 6.
L'ajout du vrai force une correspondance exacte.
Pourtant, je préfère cela (j'utilise du dactylographié, d'où le "Let" et =>):
Je fais cela parce que, à un moment donné, je pourrais vouloir obtenir plus d'informations à partir de ces données filtrées, etc ... avoir la fonction juste à l'intérieur laisse le capot ouvert.
la source
si vous souhaitez créer une liste séparée de résultats dans le contrôleur, vous pouvez appliquer un filtre
Ensuite, vous pouvez référencer les objets ayant échoué de la même manière que vous référeneriez l' objet de résultats
vous pouvez en savoir plus ici https://docs.angularjs.org/guide/filter
depuis cette réponse angular ont mis à jour la documentation, ils recommandent maintenant d'appeler le filtre
la source
Vous pouvez également utiliser des fonctions avec
$filter('filter')
:la source
Si vous utilisez ES6, vous pouvez:
Notez également que le filtre ne met pas à jour le tableau existant, il renverra un nouveau tableau filtré à chaque fois.
la source
Appliquer le même filtre en HTML avec plusieurs colonnes, exemple:
la source