Checking if object is empty, works with ng-show but not from controller?
我有一个像这样声明的JS对象
1 | $scope.items = {}; |
我还有一个$HTTP请求,它用项目填充这个对象。我想检测这个项目是否是空的,似乎ng show支持这个…我进入
1 | ng-show="items" |
号
神奇的是,它可以工作,我也希望从一个控制器做同样的事情,但我似乎不能让它工作,似乎我可能需要迭代对象,看看它是否有任何属性,或者使用lodash或下划线。
还有其他选择吗?
我试过了
1 | alert($scope.items == true); |
但是,当对象被创建并且被
或者你可以这样做来保持简单:
1 | alert(angular.equals({}, $scope.items)); |
。
在一个私人项目中,a编写了这个过滤器
1 2 3 4 5 6 7 8 9 10 11 12 | angular.module('myApp') .filter('isEmpty', function () { var bar; return function (obj) { for (bar in obj) { if (obj.hasOwnProperty(bar)) { return false; } } return true; }; }); |
。
用途:
1 2 | <p ng-hide="items | isEmpty">Some Content </p> |
测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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); }); }); |
。
当做。
此处不需要使用空对象文本,可以使用空或未定义:
1 | $scope.items = null; |
这样,
1 2 3 4 5 | if ($scope.items) { // items have value } else { // items is still null } |
号
在您的
1 2 3 4 5 6 | $http.get(..., function(data) { $scope.items = { data: data, // other stuff }; }); |
另一个简单的一行程序:
1 2 | var ob = {}; Object.keys(ob).length // 0 |
如果项目obj不能等于空,则可以执行以下操作:
1 2 3 4 | $scope.isEmpty = function (obj) { for (var i in obj) if (obj.hasOwnProperty(i)) return false; return true; }; |
。
在视图中,您可以执行以下操作:
1 |
你可以的
1 2 | var ob = {}; Object.keys(ob).length |
。
只有当您的浏览器支持ECMAScript 5时。例如,IE8不支持此功能。
有关更多信息,请参阅http://kangax.github.io/compat-table/es5/。
1 | if( obj[0] ) |
号
更清晰的版本可能是:
1 | if( typeof Object.keys(obj)[0] === 'undefined' ) |
号
如果未设置对象属性,则结果将未定义。
或者,如果使用lo破折号:.empty(值)。
"检查值是否为空。长度为0的数组、字符串或参数对象以及没有自己可枚举属性的对象被视为"空"。
检查空对象
1 2 3 | $scope.isValid = function(value) { return !value } |
号
你可以检查物品的长度
1 | ng-show="items.length" |
号