我认为这将是一个非常常见的事情,但我不知道如何在AngularJS中处理它。假设我有一个事件列表,想用AngularJS输出它们,这很简单:

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

但是当列表为空时,我如何处理这种情况呢?我想有一个消息框的地方,列表是类似于“没有事件”或类似的东西。唯一接近的是带有事件的ng-switch。长度(我如何检查当一个对象而不是数组时是否为空?),但这真的是我唯一的选择吗?


当前回答

你可以使用ngShow。

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

看到的例子。

或者你也可以使用ngHide

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

看到的例子。

对于object,你可以测试object .keys。

其他回答

你可以使用ngShow。

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

看到的例子。

或者你也可以使用ngHide

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

看到的例子。

对于object,你可以测试object .keys。

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

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

你可能需要检查angular-ui指令ui-if,如果你只是想在列表为空时从DOM中删除ul:

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

你可以使用ng-if,因为这不是呈现在HTML页面,你不会看到你的HTML标签在inspect…

<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>