Закройте все угловые аккордеоны начальной загрузки в цикле ngFor

У меня есть ситуация, когда в цикле ngFor создается ряд ngb-аккордеонов, по одному для каждого элемента данных, помеченного как аккордеон:

       <span *ngFor = "let item of menu.items">
        <!-- accordion menus -->
        <ngb-accordion
          #pageAccordion = "ngbAccordion"
          *ngIf = "item.url === '#accordion'" //in the json, says this item is an accordion
          [activeIds] = "activePanel"
          [destroyOnHide] = "false"
        >

У компонента есть viewchild для этого аккордеона:

  @ViewChild('pageAccordion', { static: false })
  pageAccordion: NgbAccordion;

И я хочу свернуть все аккордеоны:

    this.pageAccordion.collapseAll();

Проблема в том, что он сворачивает только первый, созданный в цикле ngFor. Ни один другой не закрывается.

Как я могу настроить или перебрать все динамически созданные аккордеоны и вызвать их метод collapseAll?

Я использую Angular 8 и Angular Bootstrap 5.0.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
426
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть несколько ng-accordion, поэтому используйте ViewChildren. (ViewChild получает только первый ng-accordion)

@ViewChildren('pageAccordion') pageAccordions:QueryList<NgbAccordion>
//you can use also
//@ViewChildren(NgbAccordion) pageAccordions:QueryList<NgbAccordion>


//a function to close all the accordions
closeAll()
{
   this.pageAccordions.forEach(acc => {
      acc.collapseAll()
   })
}

Другие вопросы по теме