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

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

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


当前回答

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

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

其他回答

你可以使用ngShow。

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

看到的例子。

或者你也可以使用ngHide

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

看到的例子。

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

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

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

下面是一种使用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="item in filteredItems">等将被注释掉,并将成为注释元素而不是li元素。

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

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