Вот другой подход.
Просто сделайте переменную массивом
expandedElement: PeriodicElement[] = [];
В разделе анимации используйте функцию вместо прямой проверки
[@detailExpand]="checkExpanded(element) ? 'expanded' : 'collapsed'"
И используйте ту же функцию при добавлении класса
[class.example-expanded-row]="checkExpanded(element)"
И по щелчку сделать вызов функции.Если элемент присутствует, удалите его из массива и, если его нет, добавьте его
(click)="pushPopElement(element)"
И вот две функции, которые используются.Пожалуйста, не стесняйтесь повышать эффективность методов.Это грубый метод, написанный за короткое время для демонстрации.
checkExpanded(element): boolean {
let flag = false;
this.expandedElement.forEach(e => {
if(e === element) {
flag = true;
}
});
return flag;
}
pushPopElement(element) {
const index = this.expandedElement.indexOf(element);
console.log(index);
if(index === -1) {
this.expandedElement.push(element);
} else {
this.expandedElement.splice(index,1);
}
}
Вы можете найти рабочий образец здесь: https://stackblitz.com/edit/angular-x6jz81