首页 文章

AngularJS ng-repeat处理空列表案例

提问于
浏览
372

我认为这将是一个非常普遍的事情,但我找不到如何在AngularJS中处理它 . 假设我有一个事件列表并希望使用AngularJS输出它们,那么这很简单:

<ul>
    <li ng-repeat="event in events">{{event.title}}</li>
</ul>

但是当列表为空时我该如何处理?我希望有一个消息框,其中列表与"No events"或类似的东西 . 唯一可以接近的是 ng-switchevents.length (如何在对象而不是数组时检查是否为空?),但这真的是我唯一的选择吗?

9 回答

  • 563

    你可以使用ngShow .

    <li ng-show="!events.length">No events</li>
    

    example .

    或者你可以使用ngHide

    <li ng-hide="events.length">No events</li>
    

    example .

    对于对象,您可以测试Object.keys .

  • 23

    如果你想在过滤列表中使用它,这里有一个巧妙的技巧:

    <ul>
        <li ng-repeat="item in filteredItems  = (items | filter:keyword)">
            ...
        </li>
    </ul>
    <div ng-hide="filteredItems.length">No items found</div>
    
  • 363

    如果您只想在列表为空时从DOM中删除 ul ,您可能想要查看angular-ui directive ui-if

    <ul ui-if="!!events.length">
        <li ng-repeat="event in events">{{event.title}}</li>
    </ul>
    
  • 1

    使用更新版本的angularjs,这个问题的正确答案是使用ng-if

    <ul>
      <li ng-if="list.length === 0">( No items in this list yet! )</li>
      <li ng-repeat="item in list">{{ item }}</li>
    </ul>
    

    当列表即将下载时,此解决方案不会闪烁,因为必须定义列表并且长度为0才能显示消息 .

    这是一个使用它的plunker:http://plnkr.co/edit/in7ha1wTlpuVgamiOblS?p=preview

    提示:您还可以显示加载文本或微调器:

    <li ng-if="!list">( Loading... )</li>
    
  • 29
    <ul>
        <li ng-repeat="item in items | filter:keyword as filteredItems">
            ...
        </li>
        <li ng-if="filteredItems.length===0">
            No items found
        </li>
    </ul>
    

    这类似于@Konrad'ktoso'Malawski,但稍微容易记住 .

    用Angular 1.4测试

  • 0

    这是使用CSS而不是JavaScript / AngularJS的不同方法 .

    CSS:

    .emptymsg {
      display: list-item;
    }
    
    li + .emptymsg {
      display: none;
    }
    

    标记:

    <ul>
        <li ng-repeat="item in filteredItems"> ... </li>
        <li class="emptymsg">No items found</li>
    </ul>
    

    如果列表为空,<li ng-repeat =“filterItems中的项目”>等将被注释掉,并将成为注释而不是li元素 .

  • 29

    您可以使用此ng-switch:

    <div ng-app ng-controller="friendsCtrl">
      <label>Search: </label><input ng-model="searchText" type="text">
      <div ng-init="filtered = (friends | filter:searchText)">
      <h3>'Found '{{(friends | filter:searchText).length}} friends</h3>
      <div ng-switch="(friends | filter:searchText).length">
        <span class="ng-empty" ng-switch-when="0">No friends</span>
        <table ng-switch-default>
          <thead>  
            <tr>
              <th>Name</th>
              <th>Phone</th>
            </tr>
          </thead>
          <tbody>
          <tr ng-repeat="friend in friends | filter:searchText">
            <td>{{friend.name}}</td>
            <td>{{friend.phone}}</td>
          </tr>
        </tbody>
      </table>
    </div>
    
  • 6

    我通常使用ng-show

    <li ng-show="variable.length"></li>
    

    例如,您定义的变量

    <div class="list-group-item" ng-repeat="product in store.products">
       <li ng-show="product.length">show something</li>
    </div>
    
  • 0

    你可以使用ng-if,因为这不是在html页面中渲染而你在检查中看不到你的html标签...

    <ul ng-repeat="item in items" ng-if="items.length > 0">
        <li>{{item}}<li>
    </ul>
    <div class="alert alert-info">there is no items!</div>
    

相关问题