Ich versuche, die Klasse eines Elements mit umzuschalten ng-class
<button class="btn">
<i ng-class="{(isAutoScroll()) ? 'icon-autoscroll' : 'icon-autoscroll-disabled'}"></i>
</button>
isAutoScroll ():
$scope.isAutoScroll = function()
{
$scope.autoScroll = ($scope.autoScroll) ? false : true;
return $scope.autoScroll;
}
Grundsätzlich, wenn $scope.autoScroll
es wahr ist, möchte ich, dass ng-class ist, icon-autoscroll
und wenn es falsch ist, möchte ich, dass es so isticon-autoscroll-disabled
Was ich jetzt habe, funktioniert nicht und erzeugt diesen Fehler in der Konsole
Error: Lexer Error: Unexpected next character at columns 18-18 [?] in expression [{(isAutoScroll()) ? 'icon-autoscroll' : 'icon-autoscroll-disabled'}].
Wie mache ich das richtig?
BEARBEITEN
Lösung 1: (veraltet)
<button class="btn" ng-click="autoScroll = !autoScroll">
<i ng-class="{'icon-autoscroll': autoScroll, 'icon-autoscroll-disabled': !autoScroll}"></i>
</button>
BEARBEITEN 2
Lösung 2:
Ich wollte die Lösung aktualisieren, da Solution 3
sie von Stewie bereitgestellt werden sollte. Es ist der Standard, wenn es um ternäre Operatoren geht (und für mich am einfachsten zu lesen). Die Lösung wäre
<button class="btn" ng-click="autoScroll = !autoScroll">
<i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>
</button>
wird übersetzt in:
if (autoScroll == true) ?
// benutze Klasse 'icon-autoscroll' :
// sonst benutze'icon-autoscroll-disabled'
quelle
angular expressions
per docs verwenden => Keine Kontrollflussanweisungen: Sie können im Winkelausdruck keine der folgenden Aktionen ausführen: Bedingungen, Schleifen oder Wurf. Verwenden Sie eine andere Funktion oder AnweisungautoScroll
hier nur in jedem Knopf wirkt? (Ich habe dies mit mehreren Schaltflächen getestet und es funktioniert auch gut.) Ich meine, wenn ich auf jede Schaltfläche klicke, wirkt sich dies nur auf diese Schaltfläche aus, anstatt auf alle Schaltflächen.Antworten:
Verwendung der Bedingung in der ng-Klasse:
Lösung 1:
Lösung 2:
Lösung 3 (Winkel v.1.1.4 + Einführung der Unterstützung für den ternären Operator):
Plunker
quelle
Als alternative Lösung, basierend auf dem Javascript-Logikoperator '&&', der die letzte Auswertung zurückgibt, können Sie dies auch folgendermaßen tun:
Es ist nur eine etwas kürzere Syntax, aber für mich leichter zu lesen.
quelle
Fügen Sie basierend auf der Bedingung mehr als eine Klasse hinzu:
Anwenden: Klasse1 + Klasse2 + Klasse3, wenn isNew = false ,
Übernehmen: class1 + class4 wenn isNew = true
quelle
Analog zur
toggleClass
Methode von jQuery können Sie auf diese Weise dieactive
Klasse ein- und ausschalten, wenn Sie auf das Element klicken.quelle
Autoscroll wird in der Steuerung definiert und geändert.
<span ng-class= "autoscroll?'class_if_true':'class_if_false'"></span>
Fügen Sie mehrere Klassen basierend auf der Bedingung hinzu, indem Sie:
<span ng-class= "autoscroll?'first second third':'classes_if_false'"></span>
quelle
Ich habe diese Arbeit folgendermaßen gemacht:
// in deinem Controller
quelle