Таким образом, выпадающий список ссылается на индексы отображаемых элементов.Так что это будет работать, только если вы добавите начальный индекс текущего визуализированного представления к удаленному элементу из / в индексы, например так:
<cdk-virtual-scroll-viewport cdkDropList #virtualScroller
(cdkDropListDropped)="onItemDrop($event)" itemSize="50" class="example-viewport">
<div cdkDrag *cdkVirtualFor="let item of items" class="example-item">{{item}}</div>
</cdk-virtual-scroll-viewport>
И код машинописного текста будет иметь:
@ViewChild('virtualScroller') virtualScroller: CdkVirtualScrollViewport;
...
onItemDrop(event: CdkDragDrop<FormViewOrderingItem>) {
const vsStartIndex = this.virtualScroller.getRenderedRange().start;
moveItemInArray(this.formViewOrdering, event.previousIndex + vsStartIndex, event.currentIndex + vsStartIndex);
}
Например, событие, пропущенное по капле при перемещении элемента с индексом 10 в индекс 12 списка, когда отображаемый диапазон 2-20, покажет {start: 8, end: 10}
, поэтому при добавлении обработанного начального индекса оно исправляетпроблема.
Надеюсь, это поможет, у меня это сработало.