Risposte:
Aggiornamento : Angular 1.1.5 ha aggiunto un operatore ternario , quindi ora possiamo semplicemente scrivere
<li ng-class="$first ? 'firstRow' : 'nonFirstRow'">
Se si utilizza una versione precedente di Angular, le due opzioni disponibili sono:
(condition && result_if_true || !condition && result_if_false)
{true: 'result_if_true', false: 'result_if_false'}[condition]
il punto 2. sopra crea un oggetto con due proprietà. La sintassi dell'array viene utilizzata per selezionare la proprietà con nome true o la proprietà con nome false e restituire il valore associato.
Per esempio,
<li class="{{{true: 'myClass1 myClass2', false: ''}[$first]}}">...</li>
or
<li ng-class="{true: 'myClass1 myClass2', false: ''}[$first]">...</li>
$ first è impostato su true all'interno di ng-repeat per il primo elemento, quindi quanto sopra applicherebbe la classe 'myClass1' e 'myClass2' solo la prima volta attraverso il ciclo.
Con ng-class esiste tuttavia un modo più semplice: ng-class accetta un'espressione che deve valutare una delle seguenti:
Un esempio di 1) è stato dato sopra. Ecco un esempio di 3, che penso sia molto meglio:
<li ng-class="{myClass: $first, anotherClass: $index == 2}">...</li>
La prima volta attraverso un ciclo ng-repeat, viene aggiunta la classe myClass. La terza volta ($ index inizia da 0), viene aggiunta la classe anotherClass.
ng-style accetta un'espressione che deve valutare una mappa / oggetto dei nomi di stile CSS in base a valori CSS. Per esempio,
<li ng-style="{true: {color: 'red'}, false: {}}[$first]">...</li>
ng-style
aggiornare, ma sembra essere valutato solo quando l'elemento viene renderizzato per la prima volta. (Angolo angolare qui)
Aggiornamento: Angular 1.1.5 ha aggiunto un operatore ternario, questa risposta è corretta solo per le versioni precedenti a 1.1.5. Per 1.1.5 e successive, vedere la risposta attualmente accettata.
Prima di Angular 1.1.5:
La forma di un ternario in angularjs è:
((condition) && (answer if true) || (answer if false))
Un esempio potrebbe essere:
<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>
o:
<li ng-disabled="currentPage == 0" ng-click="currentPage=0" class="{{(currentPage == 0) && 'disabled' || ''}}"><a> << </a></li>
Ormai abbiamo scoperto che la versione 1.1.5 include un ternario adeguato nella $parse
funzione, quindi usa questa risposta come esempio di filtri:
angular.module('myApp.filters', [])
.filter('conditional', function() {
return function(condition, ifTrue, ifFalse) {
return condition ? ifTrue : ifFalse;
};
});
E poi usalo come
<i ng-class="checked | conditional:'icon-check':'icon-check-empty'"></i>
Eccolo: l'operatore ternario è stato aggiunto al parser angolare in 1.1.5 ! vedi il log delle modifiche
Ecco un violino che mostra il nuovo operatore ternario utilizzato nella direttiva di classe ng.
ng-class="boolForTernary ? 'blue' : 'red'"
Mentre è possibile utilizzare la condition && if-true-part || if-false-part
sintassi nelle versioni precedenti di angolare, il solito operatore ternario condition ? true-part : false-part
è disponibile in Angolare 1.1.5 e versioni successive .
<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>
Pulsante per attivare e disattivare l'intestazione del pulsante e mostrare / nascondere il pannello div. Vedi il Plunkr