iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
Modern Web

用 Angular Material 開發應用程式系列 第 28

Day 28 - Drag & Drop

  • 分享至 

  • xImage
  •  

在 CDK 裡也提供了 Drag & Drop 的功能,我們透過這個來實作看版的頁面。

https://ithelp.ithome.com.tw/upload/images/20241012/201096452CdQOAPiwF.png

拖曳範圍定義

首先,我們會使用 cdkDropListGroup 指令定義哪一個區域可以拖曳,而這個區域有未處理、處理中與已完成三種不同的工作事項狀態。

<div class="board" cdkDropListGroup>
  <section>
    
  </section>
  <section>
  <h3>處理中</h3>
  </section>
  <section>
    <h3>已完成</h3>
  </section>
</div>

拖曳區塊與對象定義

接著就在三種不同的工作事項狀態中利用 cdkDropListcdkDropListData 來設定此區塊拖曳資料記錄的位置,並且在可以拖曳的對象使用 cdkDrag指令元件。

<h3>未處理</h3>
<div
  cdkDropList
  [cdkDropListData]="waiting()"
  (cdkDropListDropped)="onDrop($event)"
>
  @for (task of waiting(); track $index) {
    <app-task-card [task]="task" cdkDrag></app-task-card>
  }
</div>

拖曳作業

最後,就是來實作 cdkDropListDropped 這個拖曳事件的內容,其中會使用到 CDK 所提供的 moveItemInArraytransferArrayItem 兩個方法,分別來處理在同一個區域時要變更順序,以及移至不同區域時更新資料記錄。

onDrop(event: CdkDragDrop<TaskItem[]>) {
  if (event.previousContainer === event.container) {
    moveItemInArray(
      event.container.data,
      event.previousIndex,
      event.currentIndex
    );
  } else {
    transferArrayItem(
      event.previousContainer.data,
      event.container.data,
      event.previousIndex,
      event.currentIndex
    );
  }
}

如此一來,就可以實作出一個簡易的看板功能。


上一篇
Day 27 - CDK 初探
下一篇
Day 29 - CDK 的公用程式
系列文
用 Angular Material 開發應用程式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言