angular.equals() 是不是可以用作角度表达式?
Posted
技术标签:
【中文标题】angular.equals() 是不是可以用作角度表达式?【英文标题】:Does angular.equals() work as an angular expressions?angular.equals() 是否可以用作角度表达式? 【发布时间】:2015-01-12 00:07:34 【问题描述】:如果对象非空,我会尝试显示 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>
这里的期望是bar
的值仅在foo
不等于空对象时才会显示。但是,foo
显然设置为,但
bar
仍然显示。
【问题讨论】:
【参考方案1】:更简洁的方法是只将 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>
【讨论】:
这有什么缺点吗?我的意思是,既然它看起来很常见,为什么它现在还不可用? 不,没有缺点。默认情况下,Angular 的 equals 方法不会添加到范围中,以保持范围较小,并且大多数情况下 javascript equals 就足够了。【参考方案2】:您的视图正在范围内寻找函数,而$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,);
;
]);
<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>
【讨论】:
【参考方案3】:如果您想从模板或表达式访问angular
对象,您必须使其在您想使用它的范围内可用。在这种情况下,您可以将其放在testCtrl
的范围内。
var test = angular.module('test',[]);
test.controller('testCtrl', ['$scope', function($scope)
$scope.angular = angular;
$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>
我通常将实用程序对象放在$rootScope
上,因此它们随处可用。
【讨论】:
你可以通过角度表达式访问 rootscope 吗? @DavidGrinberg 您可以从角度表达式访问根范围上定义的任何内容,以及从根范围继承的所有其他范围。如果您将 JS 更改为$rootScope.angular = angular;
,则答案中的示例将表现相同。【参考方案4】:
Angular 函数不能内联使用,AFAIK。 您可以改为使用控制器内部的函数进行相等检查并返回结果。
【讨论】:
以上是关于angular.equals() 是不是可以用作角度表达式?的主要内容,如果未能解决你的问题,请参考以下文章
angular.equals() 占用了 50% 的执行时间
NSSplitViewController 导致包含的视图在窗口角上绘制