2015-06-22 12 views
15

ho questo:Come impostare la classe attiva su ng-clic?

<div class="account-item"> 
    <div class="account-heading" ng-class="active"> 
     <h4 class="account-title"> 
      <a href="#/Messages" onclick="SetActiveAccountHeading(this);"> 
      7. @Translate("SYSTEM_MESSAGES")</a> 
     </h4> 
    </div> 
    </div> 
    <div class="account-item"> 
     <div class="account-heading" ng-class="active"> 
      <h4 class="account-title"> 
       <a href="#/Info" onclick="SetActiveAccountHeading(this);"> 
       7. @Translate("SYSTEM_INFO")</a> 
      </h4> 
     </div> 
    </div> 

In angolare ho questo:

$scope.active = "active"; 

ma come posso cambiare questo su click in modo se l'utente clicca sul menu di una volta sarebbe attivo se di nuovo clic su di esso sarebbe NON essere attivo?

+2

per u http://plnkr.co/edit/nbMNSSMsWomoFJZi4XZd?p=preview :) –

+0

u può postare come risposta in modo che posso accettare it :) – None

+1

No prob Bro, puoi accettare la risposta di @Anik Islam Abhi lì :) –

risposta

41

Ok dire di avere più voci di menu e si desidera attivare o disattivare la classe di secondo per fare clic,

è possibile creare un array nel controller che rappresenta le voci di menu come,

$scope.menuItems = ['Home', 'Contact', 'About', 'Other']; 

assegnare l'impostazione predefinita, voce di menu

$scope.activeMenu = $scope.menuItems[0]; 

creare una funzione per assegnare il valore di menu selezionato, questo divertente ction assegnerà l'$scope.activeMenu all'ultima voce di menu selezionata.

$scope.setActive = function(menuItem) { 
    $scope.activeMenu = menuItem 
} 

in HTML

ciclo attraverso l'array menuItems e creare il menu.

nell'ng-class l'ultima voce di menu su cui si fa clic è uguale all'elemento nella ripetizione.

se fare clic sul menu, quindi chiamare la funzione setActive() nel controller e passare il nome della voce di menu come argomento.

<div class="account-item" ng-repeat='item in menuItems'> 
    <div class="account-heading" ng-class="{active : activeMenu === item}"> 
     <h4 class="account-title"> 
     <a href="#/Messages" ng-click="setActive(item)"> {{ item }}</a> 
     </h4> 
    </div> 
</div> 

Ecco l'DEMO

ecco un DEMO senza ng-repeat

+0

Come faresti questo se invece di voci di menu fosse una lista di stringhe, fosse una lista di oggetti? AFAIK non puoi fare un '===' confronto sugli oggetti. – dwjohnston

+0

Inoltre, puoi spiegare cos'è questa sintassi? 'ng-class =" {active: activeMenu === item} "' – dwjohnston

+0

Hmmm questa risposta qui è relativa: http://stackoverflow.com/questions/20902583/angularjs-best-practices-on-adding-an-active -class-on-click-ng-repeat – dwjohnston

9

Questo è quello che ti serve.

<div class="account-item" ng-init="active = true"> 
    <div class="account-heading" ng-class="{'active': active === true}" ng-click="active = !active"> 
    <h4 class="account-title"> 
     <a href="#/Messages">7. @Translate("SYSTEM_MESSAGES")</a> 
    </h4> 
    </div> 
</div> 

Nessun altro script. +1 se aiuta.

+1

Facile e veloce !! – thatzprem

2

Per il codice più pulito provare questo:

<div class="account-item" ng-init="active = true"> 
    <div class="account-heading" ng-class="{'active': active}"> 
    <h4 class="account-title"> 
     <a href="#/Messages" ng-click="active = !active">7. @Translate("SYSTEM_MESSAGES")</a> 
    </h4> 
    </div> 
</div> 


È possibile rimuovere il SetActiveAccountHeading evento onclick (questo);.

Ecco il JsFiddle link.

È possibile visualizzare il risultato nella console dello sviluppatore .

Spero che sia d'aiuto.

4

Se si utilizza [ui-router] non è necessario scrivere nulla solo che hanno aggiungere questo UI- sref-active = "active-menu" proprietà nel tag che si desidera attivare dopo aver cliccato/navigato.

+0

come posso aggiungere questo e dove? –

+1

Home Tamesh

+0

oh! . Ho già qualcosa. –

Problemi correlati