Что я пытаюсь сделать:
Я пытаюсь разместить на странице складные элементы стиля аккордеона, которые будут разворачиваться и сворачиваться при щелчке. Они будут расширяться при добавлении определенного класса collapsible-panel--expanded
.
Как я пытаюсь этого добиться:
Для каждого из элементов, которые я установил, событие щелчка выглядит так:
<div (click)="toggleClass()" [class.collapsible-panel--expanded]="expanded" class="collapsible-panel" *ngFor="let category of categories">
....
</div>
<div (click)="toggleClass()" [class.collapsible-panel--expanded]="expanded" class="collapsible-panel" *ngFor="let category of categories">
....
</div>
и в функции toggleClass()
у меня есть следующее:
expanded = false;
toggleClass() {
this.expanded = !this.expanded;
console.log(this.expanded)
}
Проблема, с которой я сталкиваюсь:
Когда у меня есть несколько из них на одной странице, и я нажимаю одну, все они, кажется, расширяются.
Я не видел, чтобы заставить его расширяться.
Edit:
Количество разборных ссылок будет динамическим и будет меняться по мере их создания и извлечения из базы данных. Это может быть одна ссылка сегодня, но 30 завтра и т.д.
Редактировать 2:
Хорошо, значит полный код для обработчика кликов выглядит так:
toggleClass(event) {
event.stopPropagation();
const className = 'collapsible-panel--expanded';
if (event.target.classList.contains(className)) {
event.target.classList.remove(className);
console.log("contains class, remove it")
} else {
event.target.classList.add(className);
console.log("Does not contain class, add it")
}
}
и код в HTML выглядит так:
<div (click)="toggleClass($event)" class="collapsible-panel" *ngFor="let category of categories" >
<h3 class="collapsible-panel__title">{{ category }}</h3>
<ul class="button-list button-list--small collapsible-panel__content">
<div *ngFor="let resource of resources | resInCat : category">
<a href="{{ resource.fields.resource.fields.file.url }}" target="_blank" class="button-list__inner no-decoration doc"><span class="underline display-block margin-bottom">{{ resource.fields.title }}</span><span class="secondary" *ngIf="resource.fields.description display-block">{{ resource.fields.description }}</span></a>
</div>
</ul>
</div>