2012-12-12 2 views
13

javascriptオブジェクトを反復している空のng-repeatのために、デフォルトのテキストを表示するときに問題が発生しました。通常は私は<div ng-show="object.length==0">EMPTY SET</div>"を実行しますが、javascriptオブジェクトでlengthを呼び出すことはできません。私は問題を示すために単純なjsfiddleを持っています:http://jsfiddle.net/C4t4LystX/zHJv8/8/。基本的には、ng-repeatが何度も繰り返すオブジェクトがないことを知る必要があるので、デフォルトのテキストを表示することができます。助けてくれてありがとう。angularjs javascriptオブジェクトの空のng-repeatのデフォルトテキスト

答えて

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/

EDIT:のisEmpty変更ではなく、各ループのためのangular.equalsを使用します。

+3

あなたはおそらくisEmpty関数を次のように書くことができます:return angular.equals({}、obj);それを1ライナーに変えます。 –

+0

そうですよ!回答が更新されました。 – eterps

+0

これはなぜ動作しないのですか?つまり、angular.equals()の呼び出しをインラインしようとしていますか?

EMPTY

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

+0

もちろん、何らかの理由でソースが再投入された場合でも、$ scope.emptyをfalseに設定する必要があります。 – eterps

関連する問題