Angular 7 拖放交换元素

rao*_*air 5 drag-and-drop angular-material angular

我正在尝试使用新的 Angular 7 CDK 拖放来移动元素列表。但是没有找到任何交换元素的选项,大多数给出的示例都是用于对元素进行排序。

https://stackblitz.com/angular/pxgqrvaqbxeg?file=app%2Fcdk-drag-drop-sorting-example.ts

cdk-drag-drop-sorting-example.htm

<div cdkDropList class="example-list" (cdkDropListDropped)="drop($event)">
  <div class="example-box" *ngFor="let movie of movies" cdkDrag>{{movie}}</div>
</div>
Run Code Online (Sandbox Code Playgroud)

cdk-drag-drop-sorting-example.ts

import {Component} from '@angular/core';
import {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop';

/**
 * @title Drag&Drop sorting
 */
@Component({
  selector: 'cdk-drag-drop-sorting-example',
  templateUrl: 'cdk-drag-drop-sorting-example.html',
  styleUrls: ['cdk-drag-drop-sorting-example.css'],
})
export class CdkDragDropSortingExample {
  movies = [
    'Episode I - The Phantom Menace',
    'Episode II - Attack of the Clones',
    'Episode III - Revenge of the Sith',
    'Episode IV - A New Hope',
    'Episode V - The Empire Strikes Back',
    'Episode VI - Return of the Jedi',
    'Episode VII - The Force Awakens',
    'Episode VIII - The Last Jedi'
  ];

  drop(event: CdkDragDrop<string[]>) {
    moveItemInArray(this.movies, event.previousIndex, event.currentIndex);
  }
}
Run Code Online (Sandbox Code Playgroud)

例如:如果对元素 0 的拖动开始并放置在元素 4 处,则在这种情况下,元素 0 dom 应替换为元素 4,反之亦然。

小智 -3

我不知道你是否真的检查过 Angular Material 文档,但你可以看一下:

Angular 文档(有很多排序示例)

希望它有帮助;)