13

javascriptオブジェクトを反復処理している空のng-repeatに対してデフォルトのテキストを出力するのに問題があります。通常はただ実行し<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/

編集:各ループの代わりにangular.equalsを使用するようにisEmptyを変更しました。

于 2012-12-12T18:12:07.807 に答える
1

ng-showはブール式から機能するため、必要なのは、セットが空の場合はtrueに設定し、セットに何かが含まれている場合はfalseに設定することだけです。これを行う1つの方法のフィドルは次のとおりです。

アイデアは次のとおりです。

$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 に答える