我认为这是一个非常常见的事情,但我找不到如何在AngularJS中处理它。假设我有一个事件列表并希望用AngularJS输出它们,那么这很简单:
<ul>
<li ng-repeat="event in events">{{event.title}}</li>
</ul>
但是当列表为空时我该如何处理?我希望有一个消息框,其中列表中包含“无事件”或类似内容。唯一可以接近的是ng-switch
和events.length
(如何检查对象而不是数组时是否为空?),但这真的是我唯一的选择吗?
答案 0 :(得分:565)
您可以使用ngShow。
<li ng-show="!events.length">No events</li>
请参阅example。
或者您可以使用ngHide
<li ng-hide="events.length">No events</li>
请参阅example。
对于对象,您可以测试Object.keys。
答案 1 :(得分:365)
如果你想在过滤列表中使用它,这是一个巧妙的技巧:
<ul>
<li ng-repeat="item in filteredItems = (items | filter:keyword)">
...
</li>
</ul>
<div ng-hide="filteredItems.length">No items found</div>
答案 2 :(得分:29)
如果您只想在列表为空时从DOM中删除ui-if
,则可能需要查看angular-ui directive ul
:
<ul ui-if="!!events.length">
<li ng-repeat="event in events">{{event.title}}</li>
</ul>
答案 3 :(得分:29)
使用较新版本的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>
答案 4 :(得分:23)
<ul>
<li ng-repeat="item in items | filter:keyword as filteredItems">
...
</li>
<li ng-if="filteredItems.length===0">
No items found
</li>
</ul>
这类似于@Konrad&#39; ktoso&#39;马拉维斯基但更容易记住。
使用Angular 1.4进行测试
答案 5 :(得分:6)
这是使用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>
如果列表为空,则&lt; li ng-repeat =“filterItems中的项目”&gt;等将被注释掉,并将成为注释而不是li元素。
答案 6 :(得分:1)
您可以使用此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>
答案 7 :(得分:1)
您可以使用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>
答案 8 :(得分:0)
我通常使用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>
答案 9 :(得分: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>