【发布时间】:2019-06-05 00:20:23
【问题描述】:
目标:使用 Angular Material 创建一个可以使用 Angular Drag & Drop 修改的表格。
预期行为:表格应在拖放时重新排序
当前行为:行是可拖动的,并且底层数据源的顺序会发生变化,但是当该行被删除时,它会重新回到其在表格中的原始位置。
看这个例子:
https://stackblitz.com/edit/drag-drop-reorder-mattable
如何解决/实施?
(另外,我不确定为什么它在 Stackblitz 中的样式如此糟糕。任何见解也将不胜感激)
编辑:我发现了一种超级 hacky 的方法,可以让行以正确的顺序再次呈现,但是这不可能是预期的实现方式。我只是把t.renderRows() 放在drop 事件处理程序之后执行。请参阅下面的完整行
<mat-table #t
cdkDropList
(cdkDropListDropped)="onListDrop($event); t.renderRows()"
[dataSource]="dataSource"
class="mat-elevation-z8">
...
</mat-table>
编辑 2: 我已经做了一个简单的重构来使用 rxjs,并且每个元素的第一个拖放重新排序效果很好。但是当我尝试移动一个已经移动过一次的元素时,我没有得到预期的行为。 Stackblitz 应用已更新。
【问题讨论】:
-
样式不佳是由于没有包含主题,只需将
@import '@angular/material/prebuilt-themes/deeppurple-amber.css';(或任何其他主题)添加到您的styles.css。 -
这是有道理的,它解决了样式问题。谢谢。
标签: angular drag-and-drop angular-material