jsfiddle http://jsfiddle.net/KfSBq/
所谓子对象,是指我用ng-repeat显示的所有对象在其内部都包含一个对象列表,并且我希望根据这些子对象之一的属性进行过滤。
仅此一项就非常简单。我有个对象dailies,每个对象都包含date和entries对象列表:
dailies
date
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'}]}]; }
我按类别显示它们:
<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>
我的问题是现在仍然显示不包含任何条目的日常对象。如何实现一种情况,如果过滤使entries列表为daily空,则该列表daily也不显示?
daily
您可以在表达式内创建新的作用域成员。
这使您可以将过滤列表分配给新变量,该变量可以在整个本地范围内使用。这样,您可以将过滤列表的长度传递给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>
小提琴
顺便说一句,很好地提出问题!