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/…

27voto

Lèse majesté Punkte 7674

Ich hatte vor Kurzem ein ähnliches Problem und beschloss, einfach einen bedingten Filter zu erstellen:

  angular.module('myFilters', []).
    /**
     * "if" filter
     * Einfacher Filter nützlich für bedingte Anwendung von CSS-Klassen und Entkopplung
     * Ansicht vom Controller
     */
    filter('if', function() {
      return function(input, value) {
        if (typeof(input) === 'string') {
          input = [input, ''];
        }
        return value? input[0] : input[1];
      };
    });

Er nimmt ein einzelnes Argument, das entweder ein 2-Element-Array oder ein String ist, der in ein Array umgewandelt wird, dem als zweites Element ein Leerzeichen angehängt wird:

  ...

1 Stimmen

Ich habe gerade zum Beispiel einen yesNo() Filter erstellt, der Klassen 'yes' oder 'no' zurückgibt, je nachdem, ob der boolesche Wert 1 oder 0 ist: filter('yesNo', function() { return function(input) { // info('yesNo('+ input +')'); switch(input){ case '1': return ' yes '; break; default: return ' no '; break; } } });

1 Stimmen

Ng-class kann eine Karte/Objekt von Klassennamen mit booleschen Werten verarbeiten, sodass Sie einfach Folgendes schreiben könnten: ng-class="{ja: some_boolean_expression, nein: some_other_boolean_expression}" z. B. ng-class="{ja: input, nein: !input}"

21voto

Joe Steele Punkte 691

Wenn Sie über die binäre Auswertung hinausgehen und Ihren CSS-Code aus Ihrem Controller heraushalten möchten, können Sie einen einfachen Filter implementieren, der die Eingabe gegen ein Kartenobjekt auswertet:

angular.module('myApp.filters, [])
  .filter('switch', function () { 
      return function (input, map) {
          return map[input] || '';
      }; 
  });

Dies ermöglicht es Ihnen, Ihr Markup wie folgt zu schreiben:

    ...

0 Stimmen

Hallo @Joe, hast du irgendwelche Ideen, wie man Nullwerte behandeln soll? Wenn ich null in den Eingang übergebe, wird seine Klasse nicht zugeordnet...

1 Stimmen

@user1191559 - Sie könnten ein "Standard" -Element zur Karte hinzufügen und dann diesen Wert zurückgeben, wenn "Eingabe" null ist.

17voto

Pytth Punkte 3764

Der Weg, den ich kürzlich gemacht habe, war folgender:

Der Wert isShowing ist ein Wert, der sich in meinem Controller befindet und mit einem Klick auf eine Schaltfläche umgeschaltet wird, und 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 anbietet, der von Google gesponsert wird und sich mit AngularJS befasst. Es werden alle diese Dinge und mehr behandelt. Es ist nicht notwendig, etwas zu bezahlen, melden Sie sich einfach an und legen Sie los! Viel Glück an alle!

0 Stimmen

Könnten Sie hier ein Fiddle oder mehr Code bereitstellen? Ist isShowing dann ein Array im Controller?

15voto

lionroots Punkte 284

Der Ternary Operator wurde gerade zum Angular-Parser in 1.1.5 hinzugefügt.

Also ist der einfachste Weg dies jetzt zu tun :

ng:class="($index==selectedIndex)? 'selected' : ''"

0 Stimmen

Auch: class="otherClass ng-class:($index==selectedIndex)? 'selected' : '';"

11voto

Lewis Hai Punkte 1104

Wir können eine Funktion erstellen, um die Rückgabeklasse mit Bedingung zu verwalten

Bildbeschreibung hier eingeben

    angular.module('myapp', [])
            .controller('ExampleController', ['$scope', function ($scope) {
                $scope.MyColors = ['Es ist Rot', 'Es ist Gelb', 'Es ist Blau', 'Es ist Grün', 'Es ist Grau'];
                $scope.getClass = function (strValue) {
                    switch(strValue) {
                        case "Es ist Rot":return "Red";break;
                        case "Es ist Gelb":return "Yellow";break;
                        case "Es ist Blau":return "Blue";break;
                        case "Es ist Grün":return "Green";break;
                        case "Es ist Grau":return "Gray";break;
                    }
                }
        }]);

Und dann

AngularJS ng-class if Beispiel

        {{icolor}}

Anderer Weg, um es zu tun: ng-class="{'class1' : expression1, 'class2' : expression2,'class3':expression2,...}"

        {{icolor}}

Sie können die vollständige Code-Seite unter ng-class if Beispiel nachschlagen

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