Ho riscontrato problemi durante l'applicazione delle classi all'interno degli elementi della tabella quando avevo già una classe applicata all'intera tabella (ad esempio, un colore applicato alle righe dispari <myClass tbody tr:nth-child(even) td>
). Sembra che quando si ispeziona l'elemento con Strumenti per gli sviluppatori , element.style
non è stato assegnato alcuno stile. Quindi, invece di usare ng-class
, ho provato a usare ng-style
, e in questo caso, il nuovo attributo CSS appare all'interno element.style
. Questo codice funziona alla grande per me:
<tr ng-repeat="element in collection">
[...amazing code...]
<td ng-style="myvar === 0 && {'background-color': 'red'} ||
myvar === 1 && {'background-color': 'green'} ||
myvar === 2 && {'background-color': 'yellow'}">{{ myvar }}</td>
[...more amazing code...]
</tr>
Myvar è ciò che sto valutando, e in ogni caso applico uno stile a ciascuno a <td>
seconda del valore myvar , che sovrascrive lo stile corrente applicato dalla classe CSS per l'intera tabella.
AGGIORNARE
Se si desidera applicare una classe alla tabella, ad esempio, quando si visita una pagina o in altri casi, è possibile utilizzare questa struttura:
<li ng-class="{ active: isActive('/route_a') || isActive('/route_b')}">
Fondamentalmente, ciò di cui abbiamo bisogno per attivare una classe ng è la classe da applicare e un'istruzione vera o falsa. True applica la classe e false no. Quindi qui abbiamo due controlli del percorso della pagina e un OR tra di loro, quindi se siamo in /route_a
OR siamo in route_b
, la classe attiva verrà applicata.
Funziona semplicemente con una funzione logica sulla destra che restituisce vero o falso.
Quindi nel primo esempio, ng-style è condizionato da tre affermazioni. Se tutti sono falsi, nessuno stile viene applicato, ma seguendo la nostra logica, almeno uno verrà applicato, quindi, l'espressione logica controllerà quale confronto di variabili è vero e poiché un array non vuoto è sempre vero, quello sarà ha lasciato un array come return e con un solo true, considerando che stiamo usando OR per l'intera risposta, verrà applicato lo stile rimanente.
A proposito, ho dimenticato di darti la funzione isActive ():
$rootScope.isActive = function(viewLocation) {
return viewLocation === $location.path();
};
NUOVO AGGIORNAMENTO
Qui hai qualcosa che trovo davvero utile. Quando è necessario applicare una classe in base al valore di una variabile, ad esempio un'icona in base al contenuto di div
, è possibile utilizzare il seguente codice (molto utile in ng-repeat
):
<i class="fa" ng-class="{ 'fa-github' : type === 0,
'fa-linkedin' : type === 1,
'fa-skype' : type === 2,
'fa-google' : type === 3 }"></i>
Icone da Font Awesome