Nehmen wir an, Sie haben ein Array, das in a ul
mit einem li
für jedes Element und einer Eigenschaft auf dem aufgerufenen Controller gerendert wird selectedIndex
. Was wäre der beste Weg, um li
dem Index selectedIndex
in AngularJS eine Klasse hinzuzufügen ?
Ich dupliziere derzeit (von Hand) den li
Code und füge die Klasse einem der li
Tags hinzu und verwende ng-show
und ng-hide
zeige nur eine li
pro Index.
Antworten:
Wenn Sie CSS-Klassennamen nicht wie ich in Controller einfügen möchten, finden Sie hier einen alten Trick, den ich seit Tagen vor Version 1 verwende. Wir können einen Ausdruck schreiben, der direkt zu einem ausgewählten Klassennamen ausgewertet wird. Es sind keine benutzerdefinierten Anweisungen erforderlich:
Bitte beachten Sie die alte Syntax mit Doppelpunkt.
Es gibt auch eine neue bessere Möglichkeit, Klassen bedingt anzuwenden, wie zum Beispiel:
Angular unterstützt jetzt Ausdrücke, die ein Objekt zurückgeben. Jede Eigenschaft (Name) dieses Objekts wird jetzt als Klassenname betrachtet und abhängig von ihrem Wert angewendet.
Diese Wege sind jedoch funktional nicht gleich. Hier ist ein Beispiel:
Wir könnten daher vorhandene CSS-Klassen wiederverwenden, indem wir eine Modelleigenschaft grundsätzlich einem Klassennamen zuordnen und gleichzeitig CSS-Klassen aus dem Controller-Code heraushalten.
quelle
($index==selectedIndex) ? 'selected' : ''
?{classname: '$index === selectedIndex'}
und es nicht funktionierte. Als ich alles zusammengeschoben und == anstelle von === verwendet habe, hat es funktioniert.{classname: '$index==selectedIndex'}
ng-class unterstützt einen Ausdruck, der entweder ausgewertet werden muss
Mit Form 3) können wir also einfach schreiben
Siehe auch Wie wende ich CSS-Stile in AngularJS bedingt an? für eine breitere Antwort.
Update : Angular 1.1.5 hat Unterstützung für einen ternären Operator hinzugefügt. Wenn Ihnen dieses Konstrukt also besser bekannt ist:
quelle
ng-class="{'selected': $index==selectedIndex}"
arbeitet für michMeine Lieblingsmethode ist die Verwendung des ternären Ausdrucks.
Hinweis: Wenn Sie eine ältere Version von Angular verwenden, sollten Sie diese stattdessen verwenden.
quelle
ng-class="property.name=='timestamp' ? 'property-timestamp' : 'property-'+{{$index}}"
. Konnte keinen anderen Weg herausfinden.Ich werde noch etwas hinzufügen, da einige dieser Antworten veraltet zu sein scheinen. So mache ich das:
Wobei 'isSelected' eine Javascript-Variable ist, die innerhalb des Winkelreglers definiert ist.
Um Ihre Frage genauer zu beantworten, können Sie wie folgt eine Liste erstellen:
HTML
JS
Siehe: http://jsfiddle.net/tTfWM/
Siehe: http://docs.angularjs.org/api/ng.directive:ngClass
quelle
ng-class:className
vs nur mitclass="{{className}}"
?Hier ist eine viel einfachere Lösung:
quelle
Ich hatte kürzlich ein ähnliches Problem und habe beschlossen, nur einen bedingten Filter zu erstellen:
Es wird ein einzelnes Argument benötigt, das entweder ein Array mit zwei Elementen oder eine Zeichenfolge ist, die in ein Array umgewandelt wird, an das eine leere Zeichenfolge als zweites Element angehängt wird:
quelle
filter('yesNo', function() { return function(input) { // info('yesNo('+ input +')'); switch(input){ case '1': return ' yes '; break; default: return ' no '; break; } } });
Wenn Sie über die binäre Auswertung hinausgehen und Ihr CSS von Ihrem Controller fernhalten möchten, können Sie einen einfachen Filter implementieren, der die Eingabe anhand eines Kartenobjekts auswertet:
Auf diese Weise können Sie Ihr Markup folgendermaßen schreiben:
quelle
Das habe ich kürzlich getan, als ich das tat:
Der
isShowing
Wert ist ein Wert auf meinem Controller, der mit einem Klick auf eine Schaltfläche umgeschaltet wird. Die Teile zwischen den einzelnen Klammern sind Klassen, die ich in meiner CSS-Datei erstellt habe.EDIT: Ich möchte auch hinzufügen, dass codeschool.com einen kostenlosen Kurs hat, der von Google auf AngularJS gesponsert wird und all diese und noch einige mehr Dinge behandelt. Sie müssen nichts bezahlen, melden Sie sich einfach für ein Konto an und legen Sie los! Viel Glück euch allen!
quelle
isShowing
ein Array im Controller?Der ternäre Operator wurde gerade in 1.1.5 zum Winkelparser hinzugefügt .
Der einfachste Weg, dies zu tun, ist jetzt:
quelle
class="otherClass ng-class:($index==selectedIndex)? 'selected' : '';"
.Wir können eine Funktion zum Verwalten der Rückgabeklasse mit Bedingung erstellen
Und dann
Sie können sich bei Beispiel auf die vollständige Codepage in der ng-Klasse beziehen
quelle
Ich bin neu bei Angular, habe aber Folgendes gefunden, um mein Problem zu lösen:
Dadurch wird eine Klasse basierend auf einer Variable bedingt angewendet. Es beginnt standardmäßig mit einem Icon-Download , der Verwendung von ng-class. Ich überprüfe den Status von
showDetails
iftrue/false
und wende den Icon-Upload der Klasse an . Es funktioniert großartig.Ich hoffe es hilft.
quelle
Das funktioniert wie ein Zauber;)
quelle
Dies wird wahrscheinlich in Vergessenheit geraten, aber hier ist, wie ich die ternären Operatoren von 1.1.5 verwendet habe, um Klassen zu wechseln, je nachdem, ob eine Zeile in einer Tabelle die erste, mittlere oder letzte ist - außer wenn es nur eine Zeile in der Tabelle gibt:
quelle
Dies ist in meiner Arbeit mehrere bedingte Richter:
quelle
Hier ist eine weitere Option, die gut funktioniert, wenn die ng-Klasse nicht verwendet werden kann (z. B. beim Stylen von SVG):
(Ich denke, Sie müssen auf dem neuesten instabilen Angular sein, um ng-attr- verwenden zu können. Ich bin derzeit auf 1.1.4)
quelle
Nun, ich würde vorschlagen, dass Sie den Zustand in Ihrem Controller mit einer Funktion überprüfen, die true oder false zurückgibt .
und überprüfen Sie in Ihrem Controller den Zustand
quelle
teilweise
Regler
quelle
Wenn Sie Angular Pre v1.1.5 (dh keinen ternären Operator) verwenden und dennoch eine äquivalente Methode zum Festlegen eines Werts unter beiden Bedingungen wünschen, können Sie Folgendes tun:
quelle
Wenn Sie eine gemeinsame Klasse haben, die auf viele Elemente angewendet wird, können Sie eine benutzerdefinierte Direktive erstellen, die diese Klasse wie ng-show / ng-hide hinzufügt.
Diese Anweisung fügt der Schaltfläche die Klasse 'active' hinzu, wenn darauf geklickt wird
Mehr Info
quelle
Fügen Sie einfach etwas hinzu, das heute für mich funktioniert hat, nachdem Sie viel gesucht haben ...
Hoffe, dies hilft bei Ihrer erfolgreichen Entwicklung.
=)
Undokumentierte Ausdruckssyntax: Großartiger Website-Link ... =)
quelle
Überprüfen Sie dies .
Die berüchtigte AngularJS
if|else
Aussage !!!Als ich anfing, Angularjs zu verwenden, war ich etwas überrascht, dass ich keine if / else-Anweisung finden konnte.
Ich habe an einem Projekt gearbeitet und festgestellt, dass bei Verwendung der if / else-Anweisung die Bedingung beim Laden angezeigt wird. Sie können ng-cloak verwenden, um dies zu beheben.
.ng-cloak { display: none }
Danke amadou
quelle
Sie können dieses npm-Paket verwenden. Es behandelt alles und verfügt über Optionen für statische und bedingte Klassen, die auf einer Variablen oder einer Funktion basieren.
quelle