2014-06-11 71 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>