Событие mat-expansion-panel «закрыто» вызывается со случайным индексом вместо «уничтожено»
Я используюmat-expansion-panel
внутриcdk-virtual-scroll
. Я хочу запустить функцию, когда панель уничтожается после прокрутки, но(closed)
событие вызывается вместо(destroyed)
событие, имеющее случайноеindex
как параметр.
<mat-accordion>
<cdk-virtual-scroll-viewport itemSize="50" [minBufferPx]="700" [maxBufferPx]="1000" scrollWindow>
<mat-expansion-panel *cdkVirtualFor="let item of items; let i = index;"
(opened)="panelOpened(i)"
(closed)="panelClosed(i)"
(destroyed)="panelDestroyed(item.status, i)"
[(expanded)]="item.status">
<mat-expansion-panel-header>
<mat-label>
<mat-label> {{item.id}} </mat-label>
<mat-label> isOpened: {{item.status}}</mat-label>
</mat-label>
</mat-expansion-panel-header>
<div>
<div>{{item.detail}}</div>
<div>
<button mat-raised-button color="accent">OK</button>
</div>
</div>
</mat-expansion-panel>
</cdk-virtual-scroll-viewport>
</mat-accordion>
Вы можете протестировать сценарий здесь
Шаги для воссоздания проблемы:
- открыть консоль
- открыть любую панель расширения (допустим
item5
) - прокрутите вниз, пока открытая панель не будет уничтожена.
- консоль покажет
Closed 'random index number'
сообщение вместоDestroyed 5
.
я не хочу использоватьtemplateCacheSize: 0
, это вызывает медленную визуализацию элементов при прокрутке.