Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Checking if object is empty, works with ng-show but not from controller?

I have a JS object declared like so

$scope.items = {}; 

I also have a $http request that fills this object with items. I would like to detect if this item is empty, it appears that ng-show supports this... I enter

ng-show="items" 

and magically it works,I would also like to do the same from a controller but i can't seem to get it to work, it appears I may have to iterate over the object to see if it has any properties or use lodash or underscore.

Is there an alternative?

I did try

alert($scope.items == true); 

but it always returns false , when the object is created and when populated with $http, so its not working that way.

like image 480
Martin Avatar asked Jul 24 '13 15:07

Martin


People also ask

How do you check whether an object is empty or not in angular?

Just for readability created library ngx-if-empty-or-has-items it will check if an object, set, map or array is not empty.

How do you check if an object is empty in TypeScript?

To check if an object is empty in TypeScript:Use the Object. keys() method to get an array of the object's keys. Access the length property on the array. If the length property is equal to 0 , the object is empty.


2 Answers

Or you could keep it simple by doing something like this:

alert(angular.equals({}, $scope.items)); 
like image 146
testing123 Avatar answered Sep 27 '22 20:09

testing123


In a private project a wrote this filter

angular.module('myApp')     .filter('isEmpty', function () {         var bar;         return function (obj) {             for (bar in obj) {                 if (obj.hasOwnProperty(bar)) {                     return false;                 }             }             return true;         };     }); 

usage:

<p ng-hide="items | isEmpty">Some Content</p> 

testing:

describe('Filter: isEmpty', function () {      // load the filter's module     beforeEach(module('myApp'));      // initialize a new instance of the filter before each test     var isEmpty;     beforeEach(inject(function ($filter) {         isEmpty = $filter('isEmpty');     }));      it('should return the input prefixed with "isEmpty filter:"', function () {           expect(isEmpty({})).toBe(true);           expect(isEmpty({foo: "bar"})).toBe(false);     });  }); 

regards.

like image 25
jcamelis Avatar answered Sep 27 '22 21:09

jcamelis