Подтвердить что ты не робот

Фильтрация списка ng-repeat на основе свойства под-объекта

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 не отображается?

4b9b3361

Ответ 1

Вам разрешено создавать новые члены области видимости внутри выражений.

Это позволяет назначить фильтрованный список новой переменной, которая может использоваться во всей локальной области. При этом вы можете передать длину отфильтрованного списка в 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>

FIDDLE

Btw, красиво поставил вопрос!