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.
Just for readability created library ngx-if-empty-or-has-items it will check if an object, set, map or array is not empty.
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.
Or you could keep it simple by doing something like this:
alert(angular.equals({}, $scope.items));
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With