6

C'è un modo per accedere se un gruppo di fisarmoniche è aperto o no? So che c'è la direttiva isOpen, ma non sono sicuro se c'è un modo per accedere allo stato di quello puramente in html. Usando (e abusando?) Bind a due vie posso impostare una variabile per mantenere quello stato ma non funzionerà per fisarmoniche annidate senza fare qualcosa come isOpen0, isOpen1, isOpen2, ecc. Posso anche usare ng-init per "dichiarare" una nuova isOpen sull'ambito delle fisarmoniche annidate, ma non sembra una buona idea.Angularjs Accordion Access isOpen State

<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

risposta

11

In primo luogo, è necessario utilizzare un oggetto padre like in Angular UI's docs' example, status oggetto ad esempio:

<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> 

Quindi, è possibile perfettamente utilizzare lo stesso oggetto nome per fisarmonica nidificato . La ragione è semplice: la direttiva accordion-group creerà un'istanza di un nuovo ambito per ciascun gruppo. In questo modo, quando viene modificato un status.isOpen, questo non influenzerà altri gruppi.

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

+0

Ottimo funziona così. In una iterazione ** ng-repeat **, potresti anche sostituire con 'ng-init =" status = {isOpen: $ first} "' per aprire il primo elemento. –