Каждая деталь каждого элемента отображается, потому что вы используете только одну переменную switch
и переключаете ее при каждом нажатии любого заголовка.
Вы должны однозначно идентифицировать заголовок, по которому вы щелкаете, и затем переключатьсятолько переключатель этого элемента.
В вашем компоненте создайте массив switches
такой же длины, что и массив elements
.
private switches: boolean[];
// After 'elements' data is available, initialize this array.
this.switches = new Array(elements.length).fill(false);
Измените *ngFor
, включив в него индекс, и передайтеэтот индекс для функции обработчика события щелчка.
<h1>Elements</h1>
<div *ngFor="let e of elements; let i = index">
<div (click)="toggle(i)">{{ element.name }}</div> <!-- Headline -->
<app-details *ngIf="switches[i]"></app-details> <!-- Details -->
</div>
В функции обработчика события щелчка переключите переключатель только выбранного элемента.
toggle(index) {
// Toggle selected element's detail view.
switches[index] = !switches[index];
// Close any other opened detail views.
switches.map((val, i) => i === index ? val : false);
}