2014-12-09 13 views
34

es ist ein einfaches Beispiel:AngularJS - ng-if-Check-String leer Wert

<a ng-if="item.photo == ''" href="#/details/{{item.id}}"><img src="/img.jpg" class="img-responsive"></a> 
<a ng-if="item.photo != ''" href="#/details/{{item.id}}"><img ng-src="/{{item.photo}}" class="img-responsive"></a> 

Ich sehe es immer erzeugt den item.photo != '' Zustand, auch wenn der Wert leer ist. Warum?

+0

Meinen Sie hat es noch 'ng-if = "item.photo! = ''" 'Attribut? – dfsq

+1

Nicht verwandt, aber dies scheint eine Menge Duplizierung für nur die Bildquelle zu ändern. –

+0

Vielleicht ist 'item.photo' keine leere Zeichenfolge, sondern' null' oder 'undefined'? –

Antwort

84

Sie müssen Qualifier wie item.photo == '' oder item.photo != '' nicht explizit verwenden. Wie in JavaScript wird eine leere Zeichenfolge als falsch gewertet.

Ihre Ansichten werden viel sauberer und lesbarer sein.

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app init="item = {photo: ''}"> 
 
    <div ng-if="item.photo"> show if photo is not empty</div> 
 
    <div ng-if="!item.photo"> show if photo is empty</div> 
 
    
 
    <input type=text ng-model="item.photo" placeholder="photo" /> 
 
</div

+3

Obwohl diese Antwort einfach und sauber ist, verbirgt sie einen kleinen Fehler, der für Sie nicht so wichtig ist. Beobachten Sie einfach, was passiert, wenn Sie einen der folgenden Werte eingeben: 0, n oder f. Ich konnte keine Dokumentation darüber oder ein offenes Problem finden. –

+1

Ja - dies ist ein Problem mit älteren Versionen von AnguarJS (1.2.x und vorher). Es existiert in der Version, die auf Stackexchange gehostet wird. Dieser Fehler wurde in 1.3.0 behoben https://github.com/angular/angular.js/commit/bdfc9c02d021e08babfbc966a007c71b4946d69d – Martin

+0

yuhu super .... –

7

Wenn mit "leer" meinst du undefined, es ist die Art und Weise wie ng-Ausdrücke interpretiert werden. Dann könnten Sie verwenden:

<a ng-if="!item.photo" href="#/details/{{item.id}}"><img src="/img.jpg" class="img-responsive"></a> 
8

Wahrscheinlich Ihre item.photo sind undefined, wenn Sie nicht ein Foto Attribut auf Artikel an erster Stelle und damit undefined != ''. Aber wenn Sie etwas Code einfügen würden, um zu zeigen, wie Sie Werte an item liefern, würde es helfen.

PS: Entschuldigung, dies als Antwort zu posten (ich denke eher, dass es eher ein Kommentar ist), aber ich habe noch nicht genug Reputation.