AngularJS ng-repeat处理空列表大小写

2020/09/29 15:21 · javascript ·  · 0评论

我以为这是很普通的事情,但是我找不到如何在AngularJS中处理它。假设我有一个事件列表,想用AngularJS输出它们,那很简单:

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

但是,当列表为空时如何处理?我想要一个消息框,其中的列表包含“无事件”或类似内容。唯一接近的是ng-switchwith events.length(如何检查对象而不是数组时是否为空?),但这真的是我唯一的选择吗?

您可以使用ngShow

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

参见示例

或者您可以使用ngHide

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

参见示例

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

如果您想将其与过滤列表一起使用,这是一个巧妙的技巧:

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

如果您只想在列表为空时从DOM中删除,则可能要签出angular-ui指令 ui-iful

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

对于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才能显示消息。

这是一个显示使用情况的插件:http ://plnkr.co/edit/in7ha1wTlpuVgamiOblS?p=preview

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

  <li ng-if="!list">( Loading... )</li>
<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测试

这是使用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 =“ itemfilteredItems”>等将被注释掉,并成为注释而不是li元素。

您可以使用以下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>

您可以使用as关键字来引用ng-repeat元素下的集合:

<table>
    <tr ng-repeat="task in tasks | filter:category | filter:query as res">
        <td>{{task.id}}</td>
        <td>{{task.description}}</td>
    </tr>
    <tr ng-if="res.length === 0">
        <td colspan="2">no results</td>
    </tr>
</table>

我通常使用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>

您可以使用ng-if,因为这不是在html页面中呈现的,并且您在inspect中看不到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>
本文地址:http://javascript.askforanswer.com/angularjs-ng-repeatchulikongliebiaodaxiaoxie.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!