如何实现Angular工程中列表项目在各个列表中的拖动?

举报
Jet Ding 发表于 2020/09/30 17:35:23 2020/09/30
【摘要】 安装程序库:npm install --s @angular/cdk引入模块:import { DragDropModule } from '@angular/cdk/drag-drop'; imports: [ DragDropModule, ],下面的例子是四个区域的拖动(模板):<div class="container-board"> <div class="sect...

安装程序库:

npm install --s @angular/cdk

引入模块:


import { DragDropModule } from '@angular/cdk/drag-drop';



  imports: [ 
    DragDropModule, 
  ],


下面的例子是四个区域的拖动(模板):


<div class="container-board">
  <div class="section-container">
    <h2>Backlog</h2>
    <button
      class="add-task-button"
      mat-stroked-button
      color="blue"
      (click)="addTask($event)"
    >
      <i class="fa fa-plus icon-left"></i>Add Task
    </button>



    <div 
      cdkDropList 
      #backlogList="cdkDropList" 
      [cdkDropListData]="backlog" 
      [cdkDropListConnectedTo]="[todoList, doneList, inProgressList]" 
      class="section-list" 
      (cdkDropListDropped)="drop($event)" 
    > 
      <div class="section-box" *ngFor="let item of backlog" cdkDrag> 
        {{ item }} 
      </div> 
    </div> 
  </div> 
  <div class="section-container"> 
    <h2>To Do</h2> 

    <div 
      cdkDropList 
      #todoList="cdkDropList" 
      [cdkDropListData]="todo" 
      [cdkDropListConnectedTo]="[backlogList, doneList, inProgressList]" 
      class="section-list" 
      (cdkDropListDropped)="drop($event)" 
    > 
      <div class="section-box" *ngFor="let item of todo" cdkDrag> 
        {{ item }} 
      </div> 
    </div> 
  </div> 

  <div class="section-container"> 
    <h2>In Progress</h2> 

    <div 
      cdkDropList 
      #inProgressList="cdkDropList" 
      [cdkDropListData]="inProgess" 
      [cdkDropListConnectedTo]="[backlogList, todoList, doneList]" 
      class="section-list" 
      (cdkDropListDropped)="drop($event)" 
    > 
      <div class="section-box" *ngFor="let item of inProgess" cdkDrag> 
        {{ item }} 
      </div> 
    </div> 
  </div> 

  <div class="section-container"> 
    <h2>Done</h2> 

    <div 
      cdkDropList 
      #doneList="cdkDropList" 
      [cdkDropListData]="done" 
      [cdkDropListConnectedTo]="[backlogList, todoList, inProgressList]" 
      class="section-list" 
      (cdkDropListDropped)="drop($event)" 
    > 
      <div class="section-box" *ngFor="let item of done" cdkDrag> 
        {{ item }} 
      </div> 
    </div> 
  </div> 
</div>


数据定义:




  backlog = []; 
  todo = [ 
    'Task 1', 
    'Task 2', 
    'Task 3' 
  ]; 

  inProgess = [ 
    'Task 4', 
    'Task 5', 
  ]; 

  done = [ 
    'Task 6', 
    'Task 7', 
    'Task 8', 
    'Task 9' 
  ]; 

  boards = [ 
    {id: 1name: "Board 1"}, 
    {id: 2name: "Board 2"}, 
    {id: 3name: "Board 3"}, 
  ];


样式定义:



.container-board {
    displayflex;
    justify-contentcenter;
    flex-wrapwrap;
}
.section-container {
    width400px;
    max-width100%;
    margin0 25px 25px 0;
    displayinline-block;
    vertical-aligntop;
  }
  
  .section-list {
    bordersolid 1px #ccc;
    min-height60px;
    backgroundwhite;
    border-radius4px;
    overflowhidden;
    displayblock;
  }
  
  .section-box {
    padding20px 10px;
    border-bottomsolid 1px #ccc;
    colorrgba(0000.87);
    displayflex;
    flex-directionrow;
    align-itemscenter;
    justify-contentspace-between;
    box-sizingborder-box;
    cursormove;
    backgroundwhite;
    font-size14px;
  }
  
  .cdk-drag-preview {
    box-sizingborder-box;
    border-radius4px;
    box-shadow0 5px 5px -3px rgba(0000.2),
                0 8px 10px 1px rgba(0000.14),
                0 3px 14px 2px rgba(0000.12);
  }
  
  .cdk-drag-placeholder {
    opacity0;
  }
  
  .cdk-drag-animating {
    transitiontransform 250ms cubic-bezier(000.21);
  }
  
  .section-box:last-child {
    bordernone;
  }
  
  .section-list.cdk-drop-list-dragging .section-box:not(.cdk-drag-placeholder) {
    transitiontransform 250ms cubic-bezier(000.21);
  }


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。