ng-if并检查非空的非null对象

时间:2015-08-12 11:42:05

标签: angularjs select angular-ng-if

我正在尝试这个:

<select ng-disabled="!items" class="form-control" ng-model="selected" ng-options="key as value for (key , value) in items">
    <option ng-if="items" value="">All Items</option>
</select>

但是当有项目时,All Items选项不会显示。

注意:问题归因于ng-if,没有别的。

DEMO: http://plnkr.co/edit/jarknWGYXiHdGIWNtMvC?p=preview

2 个答案:

答案 0 :(得分:4)

您可以检查对象ID是否为空

$scope.isEmpty = function (obj) {
for (var i in obj) if (obj.hasOwnProperty(i)) return false;
return true;
};

在视图中你可以这样做:

 <option ng-show="!isEmpty(items)">All Items</option>

ng-if在选项标签中不起作用 - 这是因为选择元素在DOM树上比使用ng-if的null选项更高,因此它将首先编译。 see the angular source

答案 1 :(得分:0)

这对我来说是个不错的选择:

angular
  .module('myApp')
  .filter('empty', function() {
    return function(obj) {
      return obj === null || angular.equals({}, obj)
    }
  })
<span ng-if="items|empty">0 items</span>

将该函数添加为过滤器并使用Angular进行测试。

感谢@Hmahwish的灵感。