J'ai un simple ng-repeat qui jette des données, un des champs qu'il affiche est NumberOfStamps:
<tr ng-repeat-start="list in Data.Items ">
<td><a href=" {[{list.Title}]} {[{list.ForeName}]} {[{list.SurName}]}</a></td>
<td>(Date of Birth {[{list.Dob}]})</td>
<td>{[{list.NumberOfStamps}]} stamps</td>
</tr>
Exemple de sortie:
Mr Adam Happy Date of Birth 01/6/1984 16 stamps
Mr Adam Sad Date of Birth 24/11/1975 0 stamps
Mr Adam Green Date of Birth 02/1/1963 1 stamps
Mr Adam Red Date of Birth 21/1/1951 12 stamps
Mr Adam Blue Date of Birth 28/10/1998 0 stamps
Mr Adam Brown Date of Birth 25/9/2010 0 stamps
Mr Adam Black Date of Birth 24/8/1954 21 stamps
Mr Adam Violet Date of Birth 17/5/1942 54 stamps
Comment puis-je modifier cette répétition pour afficher uniquement les enregistrements où NumberOfStams est> 0? J'ai essayé:
<tr ng-repeat-start="list in Data.Items | filter:{NumberOfStamps > 0}">
<td><a href=" {[{list.Title}]} {[{list.ForeName}]} {[{list.SurName}]}</a></td>
<td>(Date of Birth {[{list.Dob}]})</td>
<td>{[{list.NumberOfStamps}]} stamps</td>
</tr>
Production attendue:
Mr Adam Happy Date of Birth 01/6/1984 16 stamps
Mr Adam Green Date of Birth 02/1/1963 1 stamps
Mr Adam Red Date of Birth 21/1/1951 12 stamps
Mr Adam Black Date of Birth 24/8/1954 21 stamps
Mr Adam Violet Date of Birth 17/5/1942 54 stamps
Créez une fonction de prédicat sur la portée appropriée:
$scope.greaterThan = function(prop, val){
return function(item){
return item[prop] > val;
}
}
En premier argument, il prend un nom de propriété sur l'objet. Le deuxième argument est une valeur entière.
Utilisez-le dans votre vue comme ceci:
<tr ng-repeat-start="list in Data.Items | filter: greaterThan('NumberOfStamps', 0)">
Vous pouvez créer un filtre avec ng-if comme ceci:
<li ng-repeat="seller in sellers" ng-if="seller.sales > 0" >{{ seller.name }}</li>
<tr ng-repeat-start="Data.Items in list = ( Data.Item | filter:{NumberOfStamps : !0}">
<td><a href=" {[{list.Title}]} {[{list.ForeName}]} {[{list.SurName}]}</a></td>
<td>(Date of Birth {[{list.Dob}]})</td>
<td>{[{list.NumberOfStamps}]} stamps</td>
</tr>
Un moyen possible serait de supprimer les éléments du DOM qui ne répondent pas aux critères en utilisant ng-if
<tr ng-repeat-start="list in Data.Items ">
<td ng-if="list.NumberOfStamps > 0"><a href=" {[{list.Title}]} {[{list.ForeName}]} {[{list.SurName}]}</a></td>
<td ng-if="list.NumberOfStamps > 0">(Date of Birth {[{list.Dob}]})</td>
<td ng-if="list.NumberOfStamps > 0">{[{list.NumberOfStamps}]} stamps</td>
</tr>
Parce que vous ne pouvez pas avoir un div dans un tr vous devez indiquer si le td est séparé, ce qui n'est pas optimal si vous avez beaucoup de td
Jetez un oeil à cette réponse de débordement de pile. AngularJS - Comment structurer un filtre personnalisé avec ng-repeat pour renvoyer des éléments de manière conditionnelle Il explique clairement comment créer un filtre personnalisé angular à utiliser avec ng-repeat. Once vous comprenez que vous pourrez filtrer fondamentalement quoi que ce soit d'un ng-repeat
!