13

我在为迭代 javascript 对象的空 ng-repeat 打印默认文本时遇到问题。通常我只会做 a<div ng-show="object.length==0">EMPTY SET</div>"但你不能在 javascript 对象上调用 length 。我有一个简单的 jsfiddle 来演示这个问题:http: //jsfiddle.net/C4t4LystX/zHJv8/8/。基本上我只需要知道 ng-repeat 什么时候没有对象可以重复,这样我就可以显示一些默认文本。谢谢你的帮助。

4

2 回答 2

16

你是对的,javascript中没有object.length。因为您将源重置为空对象,所以您需要检查对象是否为空,或者有一些源。您可以编写一个名为 isEmpty 的简单函数。

   <div ng-show="isEmpty(sources)">
          EMPTY SOURCES
   </div>

function Ctrl1($scope) {
    $scope.sources = {source1:{id:"source1"},source2:{id:"source2"}};

    $scope.cleanSources = function(){
        $scope.sources = {};                               
    };

    $scope.isEmpty = function (obj) {
       return angular.equals({},obj); 
    };
}

http://jsfiddle.net/zHJv8/21/

编辑:将 isEmpty 更改为使用 angular.equals 而不是每个循环。

于 2012-12-12T18:12:07.807 回答
1

ng-show 使用布尔表达式,因此您只需在集合为空时将某些内容设置为 true,并在其中包含某些内容时将其设置为 false。这是一种方法的小提琴:

这是想法:

$scope.cleanSources = function(){
        $scope.sources = {}; 
        $scope.empty = true;    
    };

这是一个工作小提琴:http: //jsfiddle.net/J38r2/

此方法不直接测试源是否为空。为此,您可以:

http://jsfiddle.net/timothybone/HXgbR/4/

当然,文档显示了相同的想法: http ://docs.angularjs.org/api/ng.directive:ngShow

于 2012-12-12T18:11:03.377 回答