Я не уверен, что это лучшее решение, но вы можете использовать, например, свойство 'activeIds', например:
import { NgbAccordion } from '@ng-bootstrap/ng-bootstrap';
...
export class SomeComponent implements OnInit {
@ViewChild('accordion') accordion: NgbAccordion;
data: any[];
...
isOpen(i): boolean {
return this.accordion && this.accordion.activeIds.includes(i.toFixed());
}
...
}
И HTML-шаблон:
<ngb-accordion #accordion>
<ngb-panel *ngFor="let item of data, let i=index" id="{{i}}">
<ng-template ngbPanelTitle>
<div class="row">
<div>{{item.title}}</div>
<div>
<span [ngClass]="{'icon-arrow-up': isOpen(i), 'icon-arrow-down': !isOpen(i)}"></span>
</div>
</div>
</ng-template>
<ng-template ngbPanelContent>
<div>{{item.content}}</div>
</ng-template>
</ngb-panel>
</ngb-accordion>