web-dev-qa-db-ja.com

angularマテリアルのドラッグアンドドロップでマットテーブル行を並べ替え

Angular 7は強力なDragDropModuleをもたらしました: https://material.angular.io/cdk/drag-drop/examples

ドキュメントでは、リスト内のアイテムの再配置、または複数のリスト間でのアイテムの転送について扱います。ただし、テーブルについては触れていません。

angularマテリアルのドラッグアンドドロップシステムを使用してマットテーブルまたはcdkテーブルの行を並べ替える快適な方法があるかどうか疑問に思っていました。

cdkDropListmat-tableに追加すると、メカニズムが機能しますが、すべての豪華なアニメーションとデフォルトのドラッグプレースホルダーはありません。)

ドラッグアンドドロップでテーブルの行をソートするための実装しやすいデフォルトのようなものはありますか?

12
David Brem

スタイリングはCSSによって行われます(サンプルページの[CSS]タブをご覧ください)。マットテーブルで動作するように微調整しました。

.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. cdkDropListmat-tableに追加
  2. (cdkDropListDropped)="onListDrop($event)"mat-tableに追加
  3. cdkDragmat-rowに追加

onListDropは次のようになります。

onListDrop(event: CdkDragDrop<string[]>) {
  // Swap the elements around
  moveItemInArray(this.myArray, event.previousIndex, event.currentIndex);
}

moveItemInArrayはAngular Material関数です。インポートできます。

3
Lee Gunn

見つかった例 https://stackblitz.com/edit/angular-igmugp

欠けている部分が見えます

this.table.renderRows();
1

それはマットテーブルでは機能しません、より詳細な回答やコードの一部を投稿できますか

0
Smriti Jha