首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用角度材料的拖放重新排序mat-table行

使用角度材料的拖放重新排序mat-table行
EN

Stack Overflow用户
提问于 2018-11-19 23:06:27
回答 5查看 38.7K关注 0票数 22

Angular 7带来了强大的DragDropModulehttps://material.angular.io/cdk/drag-drop/examples

该文档涉及重新排列列表中的项目或在多个列表之间传输项目。但是,它并没有谈及表格。

我想知道是否有一种舒适的方式来使用angular material的拖放系统来重新排序mat-table或cdk-table中的行。

(您可以将cdkDropList添加到mat-table,这会使该机制工作,但没有所有花哨的动画和默认的拖动占位符。)

是否存在类似于通过拖放对表行进行排序的易于实现的默认值?

EN

回答 5

Stack Overflow用户

发布于 2018-12-05 18:28:18

样式由CSS完成(查看示例页面上的CSS选项卡)。我对它进行了调整,以便与mat-table一起工作:

代码语言:javascript
复制
.cdk-drag-preview {
  box-sizing: border-box;
  border-radius: 4px;
  box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2),
              0 8px 10px 1px rgba(0, 0, 0, 0.14),
              0 3px 14px 2px rgba(0, 0, 0, 0.12);
}

.cdk-drag-placeholder {
  opacity: 0;
}

.cdk-drag-animating {
  transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
}

.cdk-drop-list-dragging .mat-row:not(.cdk-drag-placeholder) {
  transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
}

我把它放在我的主styles.scss文件中。

对于任何想知道如何在垫子上实现拖放的人,您需要:

  1. Add cdkDropList to mat-table
  2. Add (cdkDropListDropped)="onListDrop($event)" to mat-table
  3. Add (cdkDropListDropped)="onListDrop($event)" to mat-table
  4. AddcdkDropListtomat-table
  5. Add

onListDrop看起来像这样:

代码语言:javascript
复制
onListDrop(event: CdkDragDrop<string[]>) {
  // Swap the elements around
  moveItemInArray(this.myArray, event.previousIndex, event.currentIndex);
}

moveItemInArray是一个角度材质函数。您可以将其导入。

票数 28
EN

Stack Overflow用户

发布于 2019-01-25 00:08:14

找到示例https://stackblitz.com/edit/angular-igmugp

看起来缺少的部分是

代码语言:javascript
复制
this.table.renderRows();
票数 14
EN

Stack Overflow用户

发布于 2019-11-06 17:58:52

我在stackblitz上找到了一个非常好的例子:https://stackblitz.com/edit/table-drag-n-drop

为了不破坏拖放预览的ui,请使用标记

代码语言:javascript
复制
<mat-table>...</mat-table>
<mat-header-cell>...</mat-header-cell>
<mat-cell>...</mat-cell>
<mat-header-row>...</mat-header-row>
<mat-row>...</mat-row>

而不是

代码语言:javascript
复制
<table mat-table>...</table mat-table>
<th mat-header-cell>...</th mat-header-cell>
<td mat-cell>...</td mat-cell>
<tr mat-header-row>...</tr mat-header-row>
<tr mat-row>...</tr mat-row>

https://stackoverflow.com/a/53630171/12331146中提到的css相结合,它对我来说是完美的解决方案。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53377450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档