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

Dav*_*ica 6 javascript equality object angularjs

如果对象非空,我正在尝试显示div.使用这个答案,我试图用来angular.equals检查空虚,但它没有按预期行事

var test = angular.module('test',[]);

test.controller('testCtrl', ['$scope', function($scope){
  $scope.foo={};
  $scope.bar="bam"
}]);
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

这里的期望是barwill 的值只显示if foo不等于空对象.然而,foo显然已经确定{}bar仍然显示.

Phi*_*ret 10

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

var test = angular.module('test',[]);

test.controller('testCtrl', ['$scope', function($scope){
  $scope.angular = angular;
  $scope.foo={};
  $scope.bar="bam"
}]);
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

我通常把实用工具放在上面$rootScope,所以它们随处可见.

  • @DavidGrinberg你可以从一个角度表达式访问在根镜上定义的任何东西,以及从rootscope继承的所有其他范围.如果你改变JS来做`$ rootScope.angular = angular;`答案中的例子将表现相同. (2认同)

Ben*_*ger 6

更简洁的方法是只将angular equals方法添加到$ scope:

var test = angular.module('test',[]);

test.controller('testCtrl', ['$scope', function($scope){
   $scope.angularEquals = angular.equals;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在模板中使用equals方法,例如:

<div ng-show="!angularEquals(foo,{})">{{bar}}</div>
Run Code Online (Sandbox Code Playgroud)