Ich habe Probleme beim Anwenden von Klassen in Tabellenelementen festgestellt, als ich bereits eine Klasse auf die gesamte Tabelle angewendet hatte (z. B. eine Farbe, die auf die ungeraden Zeilen angewendet wurde <myClass tbody tr:nth-child(even) td>
). Wenn Sie das Element mit den Entwicklertools untersuchen , wird dem anscheinend element.style
kein Stil zugewiesen. Anstatt zu verwenden ng-class
, habe ich versucht, zu verwenden ng-style
, und in diesem Fall wird das neue CSS-Attribut im Inneren angezeigt element.style
. Dieser Code funktioniert gut für mich:
<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 ist das, was ich evaluiere, und in jedem Fall wende ich <td>
je nach myvar- Wert einen Stil auf jeden an , der den aktuellen Stil überschreibt, den die CSS-Klasse für die gesamte Tabelle anwendet.
AKTUALISIEREN
Wenn Sie beispielsweise beim Besuch einer Seite oder in anderen Fällen eine Klasse auf die Tabelle anwenden möchten, können Sie folgende Struktur verwenden:
<li ng-class="{ active: isActive('/route_a') || isActive('/route_b')}">
Grundsätzlich benötigen wir zum Aktivieren einer ng-Klasse die anzuwendende Klasse und eine wahre oder falsche Aussage. True wendet die Klasse an und false nicht. Hier haben wir also zwei Überprüfungen der Route der Seite und ein ODER zwischen ihnen. Wenn wir uns also im /route_a
ODER befinden route_b
, wird die aktive Klasse angewendet.
Dies funktioniert nur mit einer Logikfunktion auf der rechten Seite, die true oder false zurückgibt.
Im ersten Beispiel wird ng-style also durch drei Anweisungen bedingt. Wenn alle falsch sind, wird kein Stil angewendet, aber gemäß unserer Logik wird mindestens einer angewendet. Der logische Ausdruck prüft also, welcher Variablenvergleich wahr ist, und da ein nicht leeres Array immer wahr ist, wird dies der Fall sein hat ein Array als return hinterlassen und mit nur einem true, wenn man bedenkt, dass wir OR für die gesamte Antwort verwenden, wird der verbleibende Stil angewendet.
Übrigens habe ich vergessen, Ihnen die Funktion isActive () zu geben:
$rootScope.isActive = function(viewLocation) {
return viewLocation === $location.path();
};
NEUES UPDATE
Hier haben Sie etwas, das ich wirklich nützlich finde. Wenn Sie eine Klasse abhängig vom Wert einer Variablen anwenden müssen, z. B. ein Symbol, das vom Inhalt der Variablen abhängt, div
können Sie den folgenden Code verwenden (sehr nützlich 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>
Icons von Font Awesome