angular.equals()是否可以作为角度表达式使用?

时间:2014-11-14 14:55:42

标签: javascript angularjs object equality

如果对象非空,我试图显示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;
&#13;
&#13;

此处的期望是bar的值仅显示foo是否不等于空对象。但是,foo显然已设置为{},但bar仍显示。

4 个答案:

答案 0 :(得分:9)

如果要从模板或表达式访问angular对象,则必须在要使用它的范围内使其可用。在这种情况下,您可以将其放在testCtrl的范围内。

&#13;
&#13;
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;
&#13;
&#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不存在。你需要写一个这样的:

&#13;
&#13;
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;
&#13;
&#13;

答案 3 :(得分:-1)

角度函数不能用于内联,AFAIK。 您可以使用控制器内部的函数进行相等的检查,然后返回结果。