Gibt es eine Möglichkeit, einen Ausdruck für so etwas wie ng-class
eine Bedingung zu machen?
Zum Beispiel habe ich Folgendes versucht:
<span ng-class="{test: 'obj.value1 == \'someothervalue\''}">test</span>
Das Problem mit diesem Code ist, dass obj.value1
der Klassentest unabhängig davon immer auf das Element angewendet wird. Dies tun:
<span ng-class="{test: obj.value2}">test</span>
Solange obj.value2
dies nicht einem Wahrheitswert entspricht, wird die Klasse nicht angewendet. Jetzt kann ich das Problem im ersten Beispiel folgendermaßen umgehen:
<span ng-class="{test: checkValue1()}">test</span>
Wo die checkValue1
Funktion so aussieht:
$scope.checkValue1 = function() {
return $scope.obj.value === 'somevalue';
}
Ich frage mich nur, ob das so funktionieren ng-class
soll. Ich baue auch eine benutzerdefinierte Direktive auf, in der ich etwas Ähnliches tun möchte. Ich kann jedoch keinen Weg finden, einen Ausdruck zu sehen (und vielleicht ist das unmöglich und der Grund, warum es so funktioniert).
Hier ist ein Plnkr, um zu zeigen, was ich meine.
ng-class="'label-success': obj.value1 == 'Ready', 'label-warning': obj.value1 == 'On hold'}"
Antworten:
Ihr erster Versuch war fast richtig. Es sollte ohne die Anführungszeichen funktionieren.
Hier ist ein plnkr .
Die ngClass-Direktive funktioniert mit allen Ausdrücken, die wahrheitsgemäß oder falsch bewerten. Sie ähneln den Javascript-Ausdrücken, können jedoch mit einigen Unterschieden hier gelesen werden . Wenn Ihre Bedingung zu komplex ist, können Sie eine Funktion verwenden, die wie bei Ihrem dritten Versuch wahr oder falsch zurückgibt.
Nur zur Ergänzung: Sie können auch logische Operatoren verwenden, um logische Ausdrücke wie zu bilden
quelle
'
Andernfalls", wenn Sie weitere Klassen hinzufügen möchten oder wenn Ihre Klasse Bindestriche oder Unterstriche enthält, funktioniert dies nicht.ng-class="{'test test-2: obj.value1 === 'value'}"
ng-class="{'test test-2': obj.value1 === 'value'}"
[class.test]="obj.value1 == 'someotervalue'"
.ng-class="{danger:!enabled || (type === 'WHEEL' && !isOnline) }
Verwenden der ng-Klasse in ng-repeat
Für jeden Status in task.status wird eine andere Klasse für die Zeile verwendet.
quelle
Angular JS bietet diese Funktionalität in der ng-class-Direktive . In die Sie eine Bedingung setzen und auch eine bedingte Klasse zuweisen können. Sie können dies auf zwei verschiedene Arten erreichen.
Typ 1
In diesem Code wird die Klasse entsprechend dem Wert des Statuswerts angewendet
wenn Statuswert ist 0 dann gilt Klasse ein
wenn Statuswert ist 1 dann gilt Klasse zwei
wenn Statuswert 2 dann gilt Klasse drei
Typ 2
In welcher Klasse wird nach Statuswert angewendet
wenn Statuswert 1 oder wahr , dann wird es Klasse hinzufügen test_yes
wenn Statuswert 0 oder falsch , dann wird es Klasse hinzufügen test_no
quelle
<div ng-class="{'Image' || 'image': 'image-icon', 'Video' || 'video' || 'aVideo' || 'bVideo' : 'video-icon'}[resource.type]"></div>
Ich sehe oben großartige Beispiele, aber alle beginnen mit geschweiften Klammern (json map). Eine andere Möglichkeit besteht darin, ein Ergebnis basierend auf der Berechnung zurückzugeben. Das Ergebnis kann auch eine Liste von CSS-Klassennamen sein (nicht nur Map). Beispiel:
oder
Erläuterung: Wenn der Status aktiv ist, wird die Klasse
enabled
verwendet. Andernfalls wird die Klassedisabled
verwendet.Die Liste
[]
wird für die Verwendung mehrerer Klassen verwendet (nicht nur einer).quelle
Es gibt eine einfache Methode, die Sie mit dem HTML-Klassenattribut und der Kurzform if / else verwenden können. Keine Notwendigkeit, es so komplex zu machen. Verwenden Sie einfach die folgende Methode.
Viel Spaß beim Codieren, Nimantha Perera
quelle
Ich werde Ihnen zwei Methoden zeigen, mit denen Sie ng-class dynamisch anwenden können
Schritt 1
Mit dem ternären Operator
Ausgabe
Wenn Ihre Bedingung erfüllt ist, wird Klasse1 auf Ihr Element angewendet, andernfalls wird Klasse2 angewendet.
Nachteil
Wenn Sie versuchen, den bedingten Wert zur Laufzeit zu ändern, wird die Klasse irgendwie nicht geändert. Daher empfehle ich Ihnen, Schritt 2 zu wählen, wenn Sie Anforderungen wie einen dynamischen Klassenwechsel haben.
Schritt 2
Ausgabe
Wenn Ihre Bedingung mit Wert1 übereinstimmt, wird Klasse1 auf Ihr Element angewendet. Wenn Übereinstimmungen mit Wert2 übereinstimmen, wird Klasse2 angewendet und so weiter. Und dynamischer Klassenwechsel funktioniert gut damit.
Hoffe das wird dir helfen.
quelle
Die Winkelsyntax besteht darin, den Operator : zu verwenden, um das Äquivalent eines if- Modifikators auszuführen
Fügen Sie geraden Zeilen eine Clearfix-Klasse hinzu. Trotzdem kann Ausdruck alles sein, was wir unter normalen Bedingungen haben können, und er sollte entweder als wahr oder falsch bewertet werden.
quelle
Die Verwendung der Funktion mit der ng-Klasse ist eine gute Option, wenn jemand eine komplexe Logik ausführen muss, um die entsprechende CSS-Klasse zu bestimmen.
http://jsfiddle.net/ms403Ly8/2/
HTML:
CSS:
JavaScript :
quelle
benutze das
Wenn die Bedingung beispielsweise [2 == 2] ist, sind die Zustände {true: '...', false: '...'}
quelle
Verwenden Sie dies für Angular 2
quelle
[ngClass]="['base-class', thread.isActive ? 'base-class--active' : '']"
ng-class
ist eine Richtlinie von AngularJs. Hier können Sie "String Syntax", "Array Syntax", "Evaluated Expression", "Ternary Operator" und viele weitere unten beschriebene Optionen verwenden:ngClass Verwenden der Zeichenfolgensyntax
Dies ist der einfachste Weg, ngClass zu verwenden. Sie können der ng-Klasse einfach eine Winkelvariable hinzufügen. Dies ist die Klasse, die für dieses Element verwendet wird.
Demo-Beispiel für ngClass mit String-Syntax
ngClass Verwenden der Array-Syntax
Dies ähnelt der Zeichenfolgensyntaxmethode, außer dass Sie mehrere Klassen anwenden können.
ngClass Verwenden des ausgewerteten Ausdrucks
Eine fortgeschrittenere Methode zur Verwendung von ngClass (und eine, die Sie wahrscheinlich am häufigsten verwenden werden) besteht darin, einen Ausdruck auszuwerten. Dies funktioniert so, dass
true
Sie eine bestimmte Klasse anwenden können , wenn eine Variable oder ein Ausdruck ausgewertet wird . Wenn nicht, wird die Klasse nicht angewendet.Beispiel für ngClass mit ausgewertetem Ausdruck
ngClass Using Value
Dies ähnelt der ausgewerteten Ausdrucksmethode, außer dass Sie nur mehrere Werte mit der einzigen Variablen vergleichen können.
ngClass Verwenden des ternären Operators
Mit dem ternären Operator können wir mit der Kurzform zwei verschiedene Klassen angeben, eine, wenn ein Ausdruck wahr ist, und eine für falsch. Hier ist die grundlegende Syntax für den ternären Operator:
Bewertung der ersten, letzten oder bestimmten Nummer
Wenn Sie die
ngRepeat
Direktive verwenden und Klassen auf diefirst
,last
oder eine bestimmte Nummer in der Liste anwenden möchten , können Sie spezielle Eigenschaften von verwendenngRepeat
. Dazu gehört$first
,$last
,$even
,$odd
, und ein paar andere. Hier ist ein Beispiel für die Verwendung dieser.quelle