我正在使用工作正常的cdkDropTable,除了第一次尝试拖放不起作用的元素外,控制台上显示以下错误:
Uncaught TypeError: Cannot read property '_getSiblingContainerFromPosition' of undefined
at DragRef.push../node_modules/@angular/cdk/esm5/drag-drop.es5.js.DragRef._updateActiveDropContainer
Unhandled Promise rejection: Cannot read property 'getItemIndex' of undefined ; Zone: <root> ; Task: Promise.then ; Value: TypeError: Cannot read property 'getItemIndex' of undefined
然后,如果我再次尝试,它将正常工作。
在表格中,我输入:
<table mat-table #table [dataSource]="dataSource"
cdkDropList
[cdkDropListData]="dataSource.data"
(cdkDropListDropped)="dropTable($event)"
matSort>
在.ts中,dropTable方法是:
dropTable(event: CdkDragDrop<any[]>) {
const prevIndex = this.dataSource.data.findIndex((d) => d === event.item.data);
if(event.previousContainer === event.container){
moveItemInArray(this.dataSource.data, prevIndex, event.currentIndex);
} else {
transferArrayItem(event.previousContainer.data, event.container.data, prevIndex, event.currentIndex)
}
this.dataSource.data = clonedeep(this.dataSource.data);
this.tableConfig.tableData = this.dataSource.data;
this.table.renderRows();
}
除了一个答案,用户建议在ngOnInit和ngOnChanges中添加detectChanges
方法,我什么都没找到。我已经说了,但是没用。