jsfiddle http://jsfiddle.net/KfSBq/
通过子对象我的意思是我用ng-repeat显示的对象都包含一个对象列表,我希望根据其中一个子对象的属性进行过滤。
这一点非常简单。我有一个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
也不会显示?
答案 0 :(得分:48)
您可以在表达式中创建新的范围成员。
这使您可以将筛选列表分配给新变量,该变量可以在整个本地范围内使用。有了它,您可以将已过滤列表的长度传递给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>
顺便说一下,很好地提出问题!