3
レベルをクリックするとアコーディオンを作成しようとしていますが、新しいアベレージがあればそれが徐々に表示されますが、今は再帰的にすべてのレベルが表示されますアコーディオン。私はあなたのためにこれを行うパッケージがあることを知っていますが、私はAngular4のより良い理解を得るために自分自身を作成したい。これは私のアコーディオンが今表示されている方法ですが、私は各レベルにクリックできるようにしたいと考えています。角度4マルチレベルアコーディオンの問題
- メニュー1
メニュー2
- サブメニュー2
- サブサブメニュー2
- サブサブサブメニュー2
- サブサブメニュー2
- サブメニュー2
メニュー3
私はループのインデックスまたは類似した何かでレベルを追跡する必要があると仮定していますが、私はどのように非常によく分かりません。あなたがリストの子が表示されているかどうかを判断あろう、あなたのListオブジェクトの "非表示" プロパティを追加することができ
list.ts
export class List {
title: string;
children: any;
}
app.component.ts
import { Component } from '@angular/core';
import { List } from './list';
const LIST: List[] = [
{
title: 'Menu 1',
children: []
},
{
title: 'Menu 2',
children: [{
title: 'Sub Menu 2',
children: [{
title: 'Sub Sub Menu 2',
children: [{
title: 'Sub Sub Menu 2, Sibling 1',
children: []
},
{
title: 'Sub Sub Sub Menu 2, Sibling 2',
children: []
}]
}]
}]
},
{
title: 'Menu 3',
children: []
}
];
@Component({
selector: 'my-app',
template: `
<h1>{{title}}</h1>
<ul>
<ng-template #recursiveList let-list>
<li *ngFor="let item of list; let index = index"
[class.selected]="item === selectedList"
(click)="onSelect(item)">
<span> {{item.title}} </span>
<ul *ngIf="item.children.length > 0">
<ng-container *ngTemplateOutlet="recursiveList; context:{ $implicit: item.children }"></ng-container>
</ul>
</li>
</ng-template>
<ng-container *ngTemplateOutlet="recursiveList; context:{ $implicit: list }"></ng-container>
</ul>
`
})
export class AppComponent {
title = 'Nested Accordion';
list = LIST;
selectedList: List;
onSelect(list: List): void {
this.selectedList = list;
}
}
恐ろしい:ここ
はあなたのコードに基づいてデモPlunkerです。ありがとうございました! – tim
喜んで役立つ! ;) – ktsangop