如果对象非空,我试图显示div。使用this回答,我尝试使用angular.equals
检查空白,但其行为不符合预期
var test = angular.module('test',[]);
test.controller('testCtrl', ['$scope', function($scope){
$scope.foo={};
$scope.bar="bam"
}]);

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="test">
<div ng-controller="testCtrl">
<div ng-show="!angular.equals(foo,{})">{{bar}}</div>
</div>
</div>
&#13;
此处的期望是bar
的值仅显示foo
是否不等于空对象。但是,foo
显然已设置为{}
,但bar
仍显示。
答案 0 :(得分:9)
如果要从模板或表达式访问angular
对象,则必须在要使用它的范围内使其可用。在这种情况下,您可以将其放在testCtrl
的范围内。
var test = angular.module('test',[]);
test.controller('testCtrl', ['$scope', function($scope){
$scope.angular = angular;
$scope.foo={};
$scope.bar="bam"
}]);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="test">
<div ng-controller="testCtrl">
<div ng-show="!angular.equals(foo,{})">{{bar}}</div>
</div>
</div>
&#13;
我通常将实用程序对象放在$rootScope
上,因此它们可以在任何地方使用。
答案 1 :(得分:6)
更简洁的方法是只将angular equals方法添加到$ scope:
var test = angular.module('test',[]);
test.controller('testCtrl', ['$scope', function($scope){
$scope.angularEquals = angular.equals;
}
然后您可以在模板中使用equals方法,例如:
<div ng-show="!angularEquals(foo,{})">{{bar}}</div>
答案 2 :(得分:4)
您的视图正在寻找范围内的函数,并且$scope.angular.equals
不存在。你需要写一个这样的:
var test = angular.module('test', []);
test.controller('testCtrl', ['$scope',
function($scope) {
$scope.foo = {};
$scope.bar = "bam";
$scope.isEmpty = function(obj) {
return angular.equals(obj,{});
};
}
]);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="test">
<div ng-controller="testCtrl">
<div ng-hide="isEmpty(foo)">{{bar}}</div>
</div>
</div>
&#13;
答案 3 :(得分:-1)
角度函数不能用于内联,AFAIK。 您可以使用控制器内部的函数进行相等的检查,然后返回结果。