Antworten:
Update : Angular 1.1.5 hat einen ternären Operator hinzugefügt , sodass wir jetzt einfach schreiben können
<li ng-class="$first ? 'firstRow' : 'nonFirstRow'">
Wenn Sie eine frühere Version von Angular verwenden, haben Sie zwei Möglichkeiten:
(condition && result_if_true || !condition && result_if_false)
{true: 'result_if_true', false: 'result_if_false'}[condition]
Punkt 2. oben erstellt ein Objekt mit zwei Eigenschaften. Die Array-Syntax wird verwendet, um entweder die Eigenschaft mit dem Namen true oder die Eigenschaft mit dem Namen false auszuwählen und den zugehörigen Wert zurückzugeben.
Z.B,
<li class="{{{true: 'myClass1 myClass2', false: ''}[$first]}}">...</li>
or
<li ng-class="{true: 'myClass1 myClass2', false: ''}[$first]">...</li>
$ first wird innerhalb einer ng-Wiederholung für das erste Element auf true gesetzt, sodass die oben genannten Klassen 'myClass1' und 'myClass2' nur beim ersten Durchlaufen der Schleife angewendet werden.
Mit ng-class gibt es jedoch einen einfacheren Weg: ng-class verwendet einen Ausdruck, der wie folgt ausgewertet werden muss:
Ein Beispiel für 1) wurde oben angegeben. Hier ist ein Beispiel von 3, das meiner Meinung nach viel besser liest:
<li ng-class="{myClass: $first, anotherClass: $index == 2}">...</li>
Beim ersten Durchlaufen einer ng-repeat-Schleife wird die Klasse myClass hinzugefügt. Beim dritten Durchgang ($ index beginnt bei 0) wird die Klasse anotherClass hinzugefügt.
ng-style verwendet einen Ausdruck, der zu einer Zuordnung / einem Objekt von CSS-Stilnamen zu CSS-Werten ausgewertet werden muss. Z.B,
<li ng-style="{true: {color: 'red'}, false: {}}[$first]">...</li>
ng-style
aktualisieren, aber es scheint nur ausgewertet zu werden, wenn das Element zum ersten Mal gerendert wird. (Angular Noob hier)
Update: Angular 1.1.5 hat einen ternären Operator hinzugefügt. Diese Antwort ist nur für Versionen vor 1.1.5 korrekt. Informationen zu 1.1.5 und höher finden Sie in der aktuell akzeptierten Antwort.
Vor dem Winkel 1.1.5:
Die Form eines Ternärs in Angularjs ist:
((condition) && (answer if true) || (answer if false))
Ein Beispiel wäre:
<ul class="nav">
<li>
<a href="#/page1" style="{{$location.path()=='/page2' && 'color:#fff;' || 'color:#000;'}}">Goals</a>
</li>
<li>
<a href="#/page2" style="{{$location.path()=='/page2' && 'color:#fff;' || 'color:#000;'}}">Groups</a>
</li>
</ul>
oder:
<li ng-disabled="currentPage == 0" ng-click="currentPage=0" class="{{(currentPage == 0) && 'disabled' || ''}}"><a> << </a></li>
Inzwischen haben wir alle herausgefunden, dass Version 1.1.5 einen richtigen Ternär in der $parse
Funktion enthält. Verwenden Sie diese Antwort einfach als Beispiel für Filter:
angular.module('myApp.filters', [])
.filter('conditional', function() {
return function(condition, ifTrue, ifFalse) {
return condition ? ifTrue : ifFalse;
};
});
Und dann benutze es als
<i ng-class="checked | conditional:'icon-check':'icon-check-empty'"></i>
Da ist es: Der ternäre Operator wurde in 1.1.5 zum Winkelparser hinzugefügt ! siehe das Changelog
Hier ist eine Geige, die einen neuen ternären Operator zeigt, der in der Direktive der Klasse ng verwendet wird.
ng-class="boolForTernary ? 'blue' : 'red'"
Während Sie die condition && if-true-part || if-false-part
-syntax in älteren Versionen von Angular verwenden können , ist der übliche ternäre Operator condition ? true-part : false-part
in Angular 1.1.5 und höher verfügbar .
<body ng-app="app">
<button type="button" ng-click="showme==true ? !showme :showme;message='Cancel Quiz'" class="btn btn-default">{{showme==true ? 'Cancel Quiz': 'Take a Quiz'}}</button>
<div ng-show="showme" class="panel panel-primary col-sm-4" style="margin-left:250px;">
<div class="panel-heading">Take Quiz</div>
<div class="form-group col-sm-8 form-inline" style="margin-top: 30px;margin-bottom: 30px;">
<button type="button" class="btn btn-default">Start Quiz</button>
</div>
</div>
</body>
Schaltfläche umschalten und Kopfzeile der Schaltfläche ändern und Div-Bereich ein- / ausblenden. Siehe den Plunkr