Как да използвам ng-show с филтриран ng-repeat?

Ето моя json (всеки обект може да бъде присвоен към повече от една категория):

[
 { "title" : "titel1",
   "description" : "description1",
   "data": {
             "categoryList" : [
                                { "categoryName" : "category1" }
                               ]
            }
 },
 { "title" : "titel2",
   "description" : "description2",
   "data": {
             "categoryList" : [
                                { "categoryName" : "category1" }
                               ]
            }
 },
 { "title" : "titel3",
   "description" : "description3",
   "data": {
             "categoryList" : [
                                { "categoryName" : "category2" }
                               ]
            }
 },
 ... and so on
]

Етикетите div показват съдържанието за всяка категория. Бих искал да показвам съобщението „Няма налично съдържание“, когато няма съдържание, присвоено на категория. Не съм сигурен дали нещо като ng-show="!content. "тази категория" .length" ще работи.

<!-- category 1 -->
<div>
  <ul>
    <li ng-repeat="item in content | filter:{'data':'category1'}">
    {{item.title}} - {{item.description}}
    </li>
    <li ng-show="?????">No content available</li> 
  </ul>
</div>

<!-- category 2 -->
<div>
  <ul>
    <li ng-repeat="item in content | filter:{'data':'category2'}">
    {{item.title}} - {{item.description}}
    </li>
    <li ng-show="?????">No content available</li>  
  </ul>
</div>

...


person nohona    schedule 15.04.2014    source източник


Отговори (1)


Можете да запазете масива, върнат от филтъра, и използвайте неговата дължина, за да превключите ng-show:

<li ng-repeat="item in (filteredContent = (content | filter:{'data':'category1'}))">
...
<li ng-show="filteredContent.length == 0">No content available</li>

В тази демонстрация http://plnkr.co/7kMjojVAkCkTR8XQlunB опитайте да промените филтъра, така че нищо да не съответства.

person j.wittwer    schedule 15.04.2014