#javascript #angular #angular-ui-bootstrap
Вопрос:
При создании аккордеона я смог динамически получать предметы для аккордеона. Проблема сейчас в том, что все они открываются одновременно. Можно ли открывать их по одному на основе идентификатора?
Это мой код:
<div class="accordion" id="accordionExample">
<div *ngFor="let task of tasks" class="accordion-item">
<h2 class="accordion-header" id="headingOne">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
{{task.name}}
</button>
</h2>
<div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
<div class="accordion-body">
{{task.description}}
</div>
</div>
</div>
</div>
Я предполагаю, что проблема в том, что «collapseOne» жестко закодирован, но я не могу найти решение в Интернете.
Комментарии:
1. Вы можете получить индекс с помощью ngFor, а затем добавить его в строку идентификатора
Ответ №1:
У меня нет опыта игры на аккордеоне. Но, судя по коду, похоже, вам нужно привязать отдельные идентификаторы к каждому элементу. Вы можете попробовать использовать index
локальную переменную *ngFor
директивы.
<div class="accordion" id="accordionExample">
<div *ngFor="let task of tasks; let i=index" class="accordion-item">
<h2 class="accordion-header" id="headingOne">
<button
class="accordion-button"
type="button"
data-bs-toggle="collapse{{i}}"
data-bs-target="#collapseOne{{i}}"
aria-expanded="true"
aria-controls="collapseOne{{i}}"
>
{{task.name}}
</button>
</h2>
<div
id="collapseOne{{i}}"
class="accordion-collapse collapse show"
aria-labelledby="headingOne"
data-bs-parent="#accordionExample"
>
<div class="accordion-body">
{{task.description}}
</div>
</div>
</div>
</div>