2015-05-21 8 views
18

Ich habe ein einfaches Objekt in einem Controller, das manchmal leer sein kann ({}).Testen, ob ein Objekt ein leeres Objekt in einer AngularJS-Vorlage ist

Ich möchte einige DOM-Elemente in der entsprechenden Vorlage ausblenden oder anzeigen, wenn das Objekt leer ist oder nicht.

Ich versuchte es mit einer einfachen <div ng-if="vm.testObject"> zu tun, aber wenn vm.testObject === {} es true im ng-if betrachtet wird.

Gibt es eine einfache Möglichkeit, nach einem leeren Objekt in der Vorlage zu suchen? Vorzugsweise ohne neue Variablen zum Scope hinzuzufügen.

Hier ist ein funktionierendes Plunker: http://plnkr.co/edit/Qed2MKmuedcktGGqUNi0?p=preview

+0

Wie über eine Funktion, z. B. 'vm.isEmpty = Funktion (obj) {return Object.keys (obj) .length === 0; } '. Dann können Sie 'ng-if =" vm.isEmpty (vm.testObject) "verwenden. – Phil

Antwort

19

Sind Sie in Ordnung, mit der Gleichheitsprüfung auf die ng-if bewegen?

<div ng-controller="TestController as vm"> 
    <div ng-if="!equals({}, vm.testObject)"> 
    Test Object is not empty 
    </div> 
    <div ng-if="equals({}, vm.testObject)"> 
    Test Object is empty 
    </div> 
</div> 

Ansonsten bieten einen Helfer auf den Umfang

app.controller('TestController', function() { 
    var vm = this; 

    vm.testObject = {}; 

    vm.empty = function() { 
     return vm.testObject === {}; 
    }; 
}); 

dann

<div ng-controller="TestController as vm"> 
    <div ng-if="!vm.empty()"> 
    Test Object is not empty 
    </div> 
    <div ng-if="vm.empty()"> 
    Test Object is empty 
    </div> 
</div> 
+2

Funktioniert dieser Helfer sogar? In Javascript '{} === {}' gibt false. –

+0

vm.empty = Funktion (Objekt) { return Object.keys (Objekt) .length === 0; }; –

34

Sie einen AngularJS Filter verwenden sollten:

Javascript:

app.filter('isEmpty', [function() { 
    return function(object) { 
    return angular.equals({}, object); 
    } 
}]) 

HTML-Vorlage:

<div ng-if="!(vm.testObject | isEmpty)"> 
    Test Object is not empty 
</div> 
<div ng-if="vm.testObject | isEmpty"> 
    Test Object is empty 
</div> 

Aktualisiert plunkr: http://plnkr.co/edit/J6H8VzUKnsNv1vSsRLfB?p=preview

+1

Sie haben Recht, danke, dass Sie mir da draußen geholfen haben! Gerade die Antwort korrigiert. – Numyx

+2

Für isNotEmpty 'return! Angular.equals ({}, Objekt);' –

0

Dies funktioniert. Überprüfen Sie die Länge

<div ng-if="!!vm.testObject && vm.testObject.length > 0"> 
    Test Object is not empty 
</div> 
Verwandte Themen