2014-01-25 30 views
9

有人可以向我解釋爲什麼Angularjs ngIf指令讀取'f'和'F'如falseAngularJS ng-if問題'f'和'F'

簡單的例子不工作:

<input type="text" ng-model="test" /> 
    <div ng-if="test">{{test}}<div> 

如果你把「F」或「F」沒有任何顯示在DIV,任何其他字母或正弦工作正常。

演示:http://plnkr.co/edit/wS4PqmARXG2fsblUkLpH?p=preview

+0

的[NG-不顯示即使條件滿足工作]可能重複(http://stackoverflow.com/questions/17745769/ng-show-not-working-even-though-condition-is-遇見) – Stewie

回答

11

ngIf使用toBoolean檢查internally。這裏是toBoolean本身:

function toBoolean(value) { 
    if (typeof value === 'function') { 
    value = true; 
    } else if (value && value.length !== 0) { 
    var v = lowercase("" + value); 
    value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]'); 
    } else { 
    value = false; 
    } 
    return value; 
} 

正如你所看到的,將是一個問題,不僅與f信,但也與「0」,「沒有」,「N」,等等。它不會是雖然固定。但是在未來的版本中,toBoolean可能會被刪除。

在Github上查看此討論:https://github.com/angular/angular.js/issues/1229?source=cc

2

我更喜歡使用雙!!符號模仿JavaScript通常如何工作。這可以防止test爲空。

<div ng-if="!!test">{{test}}<div> 
+0

是的,我更喜歡相同。 – Lekhnath