Angularjs Accordion Access находится в открытом состоянии

Есть ли способ узнать, открыта ли аккордеонная группа или нет? Я знаю, что есть директива isOpen, но я не уверен, есть ли способ получить доступ к ее состоянию только в html. Используя (и злоупотребляя?) двухсторонней привязкой, я могу установить переменную для хранения этого состояния, но это не сработает для вложенных аккордеонов без выполнения чего-то вроде isOpen0, isOpen1, isOpen2 и т. д. Я также могу использовать ng-init для «объявления» новый isOpen в области вложенных аккордеонов, но это не кажется хорошей идеей.

  <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


person Teeknow    schedule 15.12.2014    source источник


Ответы (1)


Во-первых, вы должны использовать родительский объект как в примере документации Angular UI, например, status объект:

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

Затем вы можете прекрасно использовать тот же объект name для вложенного аккордеона. Причина проста: директива accordion-group создает новую область действия для каждой группы. Таким образом, изменение status.isOpen не повлияет на другие группы.

Проверьте это: http://plnkr.co/edit/nJ654pvE1itnGDQGp2rk?p=preview

person ngasull    schedule 14.01.2015
comment
Отлично так работает. В итерации ng-repeat можно даже заменить на ng-init="status = {isOpen: $first}", чтобы открыть первый элемент. - person Guillaume Husta; 14.01.2015