1203 Stimmen

Was ist der beste Weg, um bedingt eine Klasse anzuwenden?

Sagen wir, Sie haben ein Array, das in einem ul mit einem li für jedes Element und einer Eigenschaft auf dem Controller namens selectedIndex gerendert wird. Wie könnte man am besten eine Klasse zu dem li mit dem Index selectedIndex in AngularJS hinzufügen?

Derzeit dupliziere ich (manuell) den li-Code und füge die Klasse zu einem der li Tags hinzu und benutze ng-show und ng-hide, um nur ein li pro Index anzuzeigen.

2 Stimmen

Antworten auf diese Frage zeigen, dass das Templating mehr als {{varname}} umfasst. Wo finde ich Dokumentation darüber, was das Templating noch bietet, wie z.B. den ternären Operator in ein paar verschiedenen Formen? docs.angularjs.org/guide/templates scheint nicht zu erklären, was das Templating an Bedingungen usw. bietet, abgesehen von {{varname.fieldname}}.

0 Stimmen

Das ist für mich so nützlich, ich hoffe es funktioniert auch für dich tech-blog.maddyzone.com/javascript/…

4voto

Sheelpriy Punkte 1645

Ich würde vorschlagen, dass du die Bedingung in deinem Controller mit einer Funktion überprüfst, die true oder false zurückgibt.

{{day.date}}

Und überprüfe die Bedingung in deinem Controller.

$scope.getTodayForHighLight = function(today, date){
return (today == date);
}

4voto

Ashley Davis Punkte 9489

Hier ist eine weitere Option, die gut funktioniert, wenn ng-class nicht verwendet werden kann (zum Beispiel beim Stylen von SVG):

ng-attr-class="{{someBoolean && 'class-when-true' || 'class-when-false' }}"

(Ich denke, du musst das neueste instabile Angular verwenden, um ng-attr- verwenden zu können. Ich bin derzeit auf 1.1.4)

3voto

Scotty.NET Punkte 12393

Wenn du Angular vor v1.1.5 verwendest (d.h. kein ternärer Operator) und immer noch eine äquivalente Möglichkeit haben willst, um einen Wert in beiden Bedingungen zu setzen, kannst du etwas in der Art tun:

ng-class="{'class1':item.isReadOnly == false, 'class2':item.isReadOnly == true}"

3voto

lars1595 Punkte 827

Wenn Sie eine gemeinsame Klasse haben, die auf viele Elemente angewendet wird, können Sie eine benutzerdefinierte Direktive erstellen, die diese Klasse hinzufügt, ähnlich wie bei ng-show/ng-hide.

Diese Direktive fügt die Klasse 'active' zu der Schaltfläche hinzu, wenn sie angeklickt wird.

module.directive('ngActive',  ['$animate', function($animate) {
  return function(scope, element, attr) {
    scope.$watch(attr.ngActive, function ngActiveWatchAction(value){
      $animate[value ? 'addClass' : 'removeClass'](element, 'active');
    });
  };
}]);

Weitere Informationen

3voto

Robert Green MBA Punkte 1495

Nur etwas hinzufügen, das heute für mich funktioniert hat, nach viel Suche...

Hoffe, dass dies bei Ihrer erfolgreichen Entwicklung hilft.

\=)

Nicht dokumentierte Ausdruckssyntax : Toller Website-Link... =)

0 Stimmen

Schau dir die akzeptierte Antwort an. Sie macht dasselbe und gibt mehr Beispiele.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X