2013-10-04 19 views
5

Moje HTML jest w następujący sposób:Jak dodać klasę po kliknięciu do elementu nadrzędnego w AngularJS?

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

Po kliknięciu <i>, chcę dodać klasę active do rodzica, który ma .cell komunikatu. Jak to zrobić z AngularJS?

+0

Tylko szybka porada: następnym razem nie pytaj 1 pytanie, a następnie zadać kolejny w niektórych komentarzach, zwłaszcza gdy wydaje się, już wiesz, że masz 2 pytania. Umieść je wszystkie w oryginalnym poście, aby ludzie mogli Ci łatwiej pomóc. –

Odpowiedz

6

OK, według ostatniego komentarza, jeśli komórki są w pętli powinieneś o tym wspomnieć w swoim pytaniu. Zakładam, że używasz powtórzenia ng.

Mam coś takiego, co działa. Klasa active również zostanie usunięta, jeśli klikniesz inną.

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> 

Kontroler:

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

Skałasz! Dzięki, to jest dokładnie to, czego potrzebuję – Shamoon

+0

@NicolasMose czy istnieje sposób na usunięcie aktywnej klasy, jeśli kliknąłeś ten sam przycisk ponownie (przełącz klasę - dodawanie i usuwanie)? – Syed

+0

@NicolasMose Wprowadziłem zmiany w kodzie, o które prosiłem powyżej. Otrzymałem odpowiedź tutaj: http: // stackoverflow.com/questions/38620253/how-to-add-active-class-to-to-parent-on-child-button-is-clicked-and-switch – 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

Oto jeden ze sposobów, za pomocą 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> 

kontroler:

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

W jaki sposób mogę ustawić wszystkie inne "komórki", aby nie były aktywne po kliknięciu? – Shamoon

+0

Zależy od konfiguracji twojego kodu. Czy możesz dodać do przykładowego kodu, abyśmy mogli dokładnie zobaczyć, co próbujesz osiągnąć? – kmdsax

0

Można to zrobić tutaj: 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> 

Można by użyć klasy : boolean wzorzec dla wyrażenia klasy ng.

A w kontrolerze:

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

UPDATE:

Jeśli chcesz zrobić przełącznik:

<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

Jak mogę usunąć klasę 'active' ze wszystkich innych' komórek'? – Shamoon

+0

Chciałbym mieć inną zmienną dla każdego rodzica. Możesz więc kliknąć "Icon1", "Icon2" itd. I ustawić inne na "false", aby klasa ng usuwała te klasy, gdy są fałszywe. – programmerdave

+0

"Komórki" są w pętli. Więc nie mogę wykonać podejścia 1, 2, 3, itp. – Shamoon

Powiązane problemy