2016-06-09 13 views
1

Ich habe einen eckigen Bootstrap Tabset.Angular JS: Klasse an zwei verschiedene Ausdrücke binden?

HINWEIS: Dies ist eine UI-Bootstrap-Anweisung. So funktioniert ng-Klasse nicht.

Um die Klasse bedingt zu ändern, fand ich hier auf SO:

<tab heading="My Tab" class="{{classifyForm.$dirty ? 'tab-dirty':''}}"> 

große Arbeiten, wenn das Formular classifyForm verschmutzt ist, fügt es die Klasse tab-dirty und ansonsten entfernt sie.

Außer jetzt muss ich das gleiche tun mit einer anderen Bedingung und einer anderen Klasse in Addition zu dem, was ich habe.

Was die Art und Weise ist es, die beiden Ausdrücke zu kombinieren, so dass ich im Wesentlichen:

if form is dirty,tab-dirty (was ich jetzt habe) undif foobar then tab-foobar

so, wenn die Form verschmutzt ist und Foobar wahr ist, Die resultierende Registerkarte sollte sowohl tab-dirty als auch tab-foobar Klassen haben, wenn nur eine wahr ist, dann nur diese eine Klasse.

+0

Ich würde eine Methode im Controller erstellen, um die Klassen-String zu generieren, vielleicht mit Argumenten :) –

+0

Das ist ein guter Ansatz. Es könnte keinen anderen Weg geben. – Steve

Antwort

1

Es ist sehr ärgerlich, dass man nicht ng-Klasse auf diese verwenden können, aber Sie können Folgendes tun

<tab heading="My Tab" class="{{ (classifyForm.$dirty ? 'tab-dirty ':'') + (classifyForm.foobar ? 'tab-foobar ':'')}}"> 
+0

Ich war mir nicht sicher, wie ich sowas strukturieren sollte. Vielen Dank. – Steve

+0

Es funktioniert. Ich benutze die gleiche Art in meiner Anwendung. –

+0

Ich musste n edit machen, um sicherzustellen, dass alle hinzugefügten Klassen einen Abstand zwischen ihnen haben. Sonst hättest du im obigen Fall 'class =" tab-dirtyfoobar "' – Steve

1

aktualisieren: ng-class wird nicht auf dem Winkel ui tab Richtlinie funktionieren wie die OP erwähnt. Hier ist der Link zu einem der geloggten Bugs: https://github.com/angular-ui/bootstrap/issues/1741

Sie bieten keine guten Lösungen um es zu umgehen. Die einzige Möglichkeit, die ich sehe, ist, eine Funktion im Controller zu erstellen, um die Logik zu handhaben, die die Klasse (n) anwendet.

In allen anderen Fällen (wenn möglich), dann sollten Sie ng-class verwenden

<tab heading="My Tab" ng-class="{ 'tab-dirty': classifyForm.$dirty, 'your-other-class': someOtherProperty }"> 
+0

Ich kann nicht ng-Klasse verwenden, das ist eine Direktive für ui-bootstrap. Wenn ich die ng-Klasse benutzen könnte, wäre es so einfach wie Sie es vorschlagen. – Steve

+0

Kannst du einen Plünderer dafür machen? Das ist seltsam, warum 'ng-class' nicht funktionieren würde. – DerekMT12

+0

"Tab" ist eine Direktive und die Direktive schreibt tatsächlich ihren eigenen Bootstrap-HTML-Code aus und enthält ihren Inhalt. Wer auch immer es erstellt hat, ließ keine ng-Klasse hinzufügen. Dies ist eine ältere Version der Richtlinie, 0.13.1. Vielleicht ist der aktuelle klüger, aber dieses Projekt steckt im alten fest. – Steve

Verwandte Themen