angularjs - multiple - ng-repeat limit
Filtrar una lista ng-repeat basada en una propiedad de subobjeto (1)
jsfiddle http://jsfiddle.net/KfSBq/
Por subobjeto quiero decir que los objetos que estoy mostrando con ng-repeat all contienen una lista de objetos dentro de ellos, y estoy buscando filtrar en función de la propiedad de uno de esos sub-objetos.
Esto solo fue bastante sencillo de hacer. Tengo un objeto de dailies
, cada uno contiene una date
y una lista de objetos de entries
:
function Ctrl($scope) {
$scope.dailies = [{date: new Date(''07/07/2013''),
entries: [{category: ''A'', note:''Lorem ipsum''},
{category: ''B'', note: ''Lorem ipsum''}]},
{date: new Date(''05/02/2013''),
entries: [{category: ''A'', note: ''Lorem ipsum''}]}];
}
Los visualizo, filtrando por categoría:
<div ng-controller="Ctrl">
<div class="daily" ng-repeat="daily in dailies | orderBy:''-date'' ">
{{ daily.date | date:''dd/MM/y'' }}
<div class="entry" ng-repeat="entry in daily.entries | filter:{ category: ''B''} ">
<span>{{ entry.category }}</span>, <span>{{ entry.note }}</span>
</div>
</div>
</div>
Mi problema aquí es que los objetos diarios que ahora no contienen ninguna entrada todavía se muestran. ¿Cómo puedo lograr una situación en la que, si el filtrado hace que las entries
enumeren un daily
vacío, tampoco se muestre daily
?
Puede crear nuevos miembros de ámbito dentro de las expresiones.
Esto le permite asignar una lista filtrada a una nueva variable, que puede usarse en todo el ámbito local. Con eso, puedes pasar la longitud de la lista filtrada a ng-show:
<body ng-app>
<div ng-controller="Ctrl">
<div class="daily"
ng-repeat="daily in dailies | orderBy:''-date'' "
ng-show="filteredEntries.length"
>
{{ daily.date | date:''dd/MM/y'' }}
<div class="entry"
ng-repeat="entry in filteredEntries = (daily.entries | filter:{ category: ''B''})"
>
<span>{{ entry.category }}</span>, <span>{{ entry.note }}</span>
</div>
</div>
</div>
</body>
Por cierto, muy bien pregunta!