2014-06-11 42 views
2

考虑下面的代码:AngularJS未定义,空,0

<div ng-controller="SomeCtrl"> 
    <div ng-show="someVariable.someProperty">Value of someProperty is set</div> 
</div> 

现在,当我在SomeCtrl控制器设置:

$scope.someVariable.someProperty = 1; 

它会显示在div,符合市场预期。但是,当我设置:

$scope.someVariable.someProperty = 0; 

它没有,而我只想把它藏在情况$scope.someVariable.someProperty或者是undefinednull。当然,我可以写一个简单的JavaScript助手功能给我预期的结果,或写类似:

<div ng-show="someVariable.someProperty || someVariable.someProperty == 0">Value of someProperty is set</div> 

但是是不是有一个更优雅的方式来 处理这AngularJS?

+3

JavaScript中的'0'是虚假的 – tymeJV

回答

3

我只想把它藏在这里是$ scope.someVariable.someProperty是未定义或空

在JavaScript中,不确定== null,但既不== 0,没有必要用于额外的功能或额外的条件 ng-show="someVariable.someProperty != null"

+1

您可能会担心使用'==',因为人们总是谈论它是如何破坏东西的。但这实际上是您可以使用它的唯一案例;除非检查为空,否则大多数js linters都会标记'=='。 – SgtPepper43

0

更改您的逻辑是更多的东西这样便:

ng-show="someVariable.someProperty !== null && someVariable.someProperty >= 0"> 

这样nullundefined将falsy。

我差点忘了,null >= 0 === true(愚蠢的Javascript :)

0

将一个函数在控制器这样的:

$scope.shouldShow = function() { 
    if($scope.someVariable.someProperty === null || 
     $scope.someVariable.someProperty === "undefined") { 
     return false; 
    } 
    return true; 

} 

,并在html:正如@提到

<div ng-show="shouldShow()">Value of someProperty is set</div> 
0

tymeJV,在JS中将“0”评估为false,所以ng-show =“0”将评估隐藏div。

在SomeCtrl中,您可以编写一个封装逻辑的函数,以确定someProperty是否为null或未定义,并根据该评估返回true或false。

angular.module("app") 
.controller("SomeCtrl", function($scope) { 
    $scope.someVariable = {}; 
    $scope.someVariable.someProperty = null; 
    $scope.isNullorUndefined = function(value) { 
     return value === null || angular.isUndefined(value);   
    }; 
}); 

<div ng-show="!isNullOrUndefined(someVariable.someProperty)">Value of someProperty is set</div>