Angular 7 a apporté le puissant DragDropModule: https://material.angular.io/cdk/drag-drop/examples
La documentation traite de la réorganisation d'éléments dans des listes ou du transfert d'éléments entre plusieurs listes. Cependant, il ne parle pas de tables.
Je me demandais s'il existait un moyen confortable d'utiliser le système de glisser-déposer d'un matériau angulaire pour réorganiser les lignes dans mat-table ou cdk-table.
(Vous pouvez ajouter cdkDropList à mat-table, ce qui permet au mécanisme de fonctionner, mais sans toutes les animations fantaisistes et les espaces réservés par défaut pour les déplacements.)
Existe-t-il quelque chose comme une valeur par défaut facile à mettre en œuvre pour trier les lignes d'un tableau par glisser-déposer?
Merci de votre aide :)
Le style est fait par CSS (regardez l'onglet CSS sur la page d'exemple). Je l'ai modifié pour qu'il fonctionne avec mat-table:
.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);
}
Je l'ai placé dans mon fichier principal styles.scss.
Pour ceux qui se demandent comment implémenter le glisser-déposer sur une table mat, vous devez:
cdkDropList
à mat-table
(cdkDropListDropped)="onListDrop($event)"
à mat-table
cdkDrag
à mat-row
onListDrop
ressemblera à quelque chose comme:
onListDrop(event: CdkDragDrop<string[]>) {
// Swap the elements around
moveItemInArray(this.myArray, event.previousIndex, event.currentIndex);
}
moveItemInArray
est une fonction Matériau angulaire. Vous pouvez l'importer.
Exemple trouvé https://stackblitz.com/edit/angular-igmugp
Regarde la partie manquante est
this.table.renderRows();
sa ne fonctionne pas pour la table mat, pouvez-vous poster une réponse plus décrite ou tout morceau de code