6

Gibt es eine Möglichkeit für den Zugriff auf, ob eine Akkordeon-Gruppe offen ist oder nicht? Ich weiß, dass es die isOpen-Direktive gibt, aber ich bin mir nicht sicher, ob es einen Weg gibt, auf den Zustand davon zuzugreifen, während es rein im HTML ist. Mit Hilfe von (und zu missbrauchen?) Zweiweg-Bindung ich eine Variable setzen kann, diesen Zustand zu halten, aber es wird für verschachtelte Akkordeons nicht arbeiten, ohne etwas zu tun, wie isOpen0, isOpen1, isOpen2 usw. kann ich auch verwenden ng-init zu „erklären“ eine neue isOpen auf den Umfang der verschachtelten Akkordeons, aber das klingt nicht wie eine gute Idee.AngularJS Akkordeon Zugang isOpen Staat

<accordion> 
    <accordion-group is-open="isOpen"> 
     <accordion-heading> 
     <div ng-class="{'myClass': isOpen}">Static Text</div> 
     </accordion-heading> 
     This content is straight in the template. 
    </accordion-group> 
    </accordion> 

http://plnkr.co/edit/l5y4raei99pedNWcE225

Antwort

11

Zuerst müssen Sie ein übergeordnetes Objekt verwenden like in Angular UI's docs' example, status Objekt zum Beispiel:

<div accordion-group="" ng-init="status = {isOpen: false}" is-open="status.isOpen"> 
     <div accordion-heading=""> 
      <div ng-class="{'is-open': status.isOpen}">NUTRIENT PROFILES</div> 
     </div> 
     ... 
    </div> 

Dann können Sie perfekt verwenden das gleiche Objekt Name für verschachteltes Akkordeon . Der Grund ist einfach: accordion-group Direktive wird einen neuen Bereich für jede Gruppe instanziieren. Wenn eine status.isOpen geändert wird, hat dies keine Auswirkungen auf andere Gruppen.

Check it: http://plnkr.co/edit/nJ654pvE1itnGDQGp2rk?p=preview

+0

Groß es so funktioniert. In einer ** ng-Repeat ** Iteration, könnten Sie sogar ersetzen durch 'ng-init = "status = {isOpen: $ first}"' das erste Element zu öffnen. –