检查对象是否为空,使用ng-show而不是来自控制器?

我有一个JS对象声明如此

$scope.items = {}; 

我也有一个$ http请求,用项目填充这个对象。 我想检测这个项目是否为空,看来ng-show支持这个…我input

 ng-show="items" 

神奇的,它的工作原理,我也想做一样的控制器,但我似乎无法得到它的工作,似乎我可能不得不迭代对象,看看它是否有任何属性或使用lodash或下划线。

有其他select吗?

我曾尝试过

 alert($scope.items == true); 

但是当对象被创build并且使用$http填充时,它总是返回false,所以它不会以这种方式工作。

使用空对象字面量在这里是不必要的,可以使用null或undefined:

 $scope.items = null; 

这样, ng-show应该继续工作,在你的控制器中,你可以做:

 if ($scope.items) { // items have value } else { // items is still null } 

在您的$httpcallback中,您可以执行以下操作:

 $http.get(..., function(data) { $scope.items = { data: data, // other stuff }; }); 

或者你可以通过做这样的事情来保持简单:

 alert(angular.equals({}, $scope.items)); 

在一个私人项目中写了这个filter

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

用法:

 <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); }); }); 

问候。

另一个简单的单线:

 var ob = {}; Object.keys(ob).length // 0 

如果你不能把OBJ等于null的项目,你可以这样做:

 $scope.isEmpty = function (obj) { for (var i in obj) if (obj.hasOwnProperty(i)) return false; return true; }; 

在视图中你可以这样做:

 <div ng-show="isEmpty(items)"></div> 

你可以做

 var ob = {}; Object.keys(ob).length 

仅当您的浏览器支持ECMAScript 5时。例如,IE 8不支持此function。

有关更多信息,请参阅http://kangax.github.io/compat-table/es5/

或者,如果使用lo-dash:_.empty(值)。

“检查值是否为空数组,string或长度为0的参数对象和没有自己可枚举属性的对象被视为”空“。

 if( obj[0] ) 

这个清洁版本可能是:

 if( typeof Object.keys(obj)[0] === 'undefined' ) 

如果没有设置对象属性,结果将是未定义的。

检查空对象

 $scope.isValid = function(value) { return !value } 

你可以检查项目的长度

 ng-show="items.length"