2013-10-04 6 views
5

Mein HTML ist wie folgt:Wie füge ich beim Klicken auf ein übergeordnetes Element in AngularJS eine Klasse hinzu?

<div class="cell"> 
    <div class="offset-container pull-left"> 
    <i data-ng-click="doCtrlStuff()"></i> 
    </div> 
</div> 

Wenn Sie das <i> klicken, möchte ich eine active Klasse an die Mutter hinzuzufügen, die .cell derzeit. Wie ist das mit AngularJS machbar? Hier

+0

Nur ein kurzes Wort der Beratung: beim nächsten Mal nicht 1 Frage stellen und dann fragen, noch eine weitere in einigen Kommentaren, vor allem, wenn Sie scheinen Weißt du schon, du hattest 2 Fragen. Setzen Sie sie alle in den ursprünglichen Post, damit die Leute Ihnen leichter helfen können. –

Antwort

6

OK, nach Ihrem letzten Kommentar, wenn Ihre Zellen sind in einer Schleife hättest du das in deiner Frage erwähnen sollen. Ich nehme an, du benutzt ng-repeat.

Ich habe so etwas, was funktioniert. Die Klasse active wird ebenfalls entfernt, wenn Sie auf eine andere klicken.

HTML:

<div ng-repeat="cell in [0,1,2]" data-ng-class="{cell:true, active:index=='{{$index}}'}"> 
    <div class="offset-container pull-left"> 
     <i data-ng-click="activate($index)">Activate Me</i> 
    </div> 
</div> 

Controller:

$scope.activate= function(index){ 
     $scope.index=index; 
    }; 
+0

Sie rocken! Danke, das ist genau das, was ich brauche – Shamoon

+0

@NicolasMose gibt es eine Möglichkeit, aktive Klasse zu entfernen, wenn Sie die gleiche Schaltfläche erneut angeklickt (toggle-Klasse - hinzufügen und entfernen)? – Syed

+0

@NicolasMose Ich habe die Änderungen an Ihrem Code vorgenommen, wie ich es oben gefordert habe. Ich habe es hier beantwortet: http: // stackoverflow.com/questions/38620253/how-to-add-active-class-zu-diesem-parent-on-child-button-is-click-and-toggle – Syed

0
<div class="cell" ng-class="{'active': isActive}"> 
    <div class="offset-container pull-left"> 
    <i data-ng-click="isActive = !isActive"></i> 
    </div> 
</div> 
2

ist eine Möglichkeit, mit ng-class

<div class="cell" ng-class="{'active': isActive==true}"> 
    <div class="offset-container pull-left"> 
    <i data-ng-click="doCtrlStuff()">clicky</i>  
    </div> 
</div> 

Controller:

function MyCtrl($scope) { 
    $scope.doCtrlStuff = function(){ 
     $scope.isActive = true; 
    }    
} 
+0

Wie kann ich einstellen, dass alle anderen "Zellen" nicht aktiv sind, wenn man darauf klickt? – Shamoon

+0

Hängt davon ab, wie Ihr Code eingerichtet ist. Können Sie Ihren Beispielcode hinzufügen, damit wir genau sehen können, was Sie erreichen möchten? – kmdsax

0

Sie können dies tun, von hier: http://docs.angularjs.org/api/ng.directive:ngClass

<div data-ng-class="{cell:true, active:clickedIcon}"> 
    <div class="offset-container pull-left"> 
    <i data-ng-click="doCtrlStuff()"></i> 
    </div> 
</div> 

Sie würden eine Klasse verwenden : Boolescher Wert Muster für den Ausdruck der ng-Klasse.

Und in Ihrem Controller:

$scope.doCtrlStuff = function() { 
    $scope.clickedIcon = true; 
} 

UPDATE:

Wenn Sie ein Optionsfeld zu tun:

<div data-ng-class="{cell:true, active:clickedDogIcon}"> 
    <div class="offset-container pull-left"> 
    <i data-ng-click="doDogStuff()"></i> 
    </div> 
</div> 
<div data-ng-class="{cell:true, active:clickedCatIcon}"> 
    <div class="offset-container pull-left"> 
    <i data-ng-click="doCatStuff()"></i> 
    </div> 
</div> 

$scope.doDogStuff = function() { 
    $scope.clickedDogIcon = true; 
    $scope.clickedCatIcon = false; 
} 
$scope.doCatStuff = function() { 
    $scope.clickedDogIcon = false; 
    $scope.clickedCatIcon = true; 
} 
+0

Wie kann ich die 'aktive' Klasse von allen anderen' Zellen' entfernen? – Shamoon

+0

Ich hätte eine andere Variable für jedes Elternteil. So können Sie clickedIcon1, clickedIcon2, etc ... und setzen Sie die anderen auf false, so dass ng-Klasse diese Klasse entfernen wird, wenn sie falsch sind. – programmerdave

+0

Die Zellen befinden sich in einer Schleife. Also kann ich nicht die 1, 2, 3, etc. Ansatz – Shamoon

Verwandte Themen