【问题标题】:Angular CDK connecting multiple drop zones with cdkDropListConnectedToAngular CDK 使用 cdkDropListConnectedTo 连接多个拖放区
【发布时间】:2019-04-08 06:06:37
【问题描述】:

我正在创建一个带有泳道的简单板界面,例如 Jira 泳道或 trello 板

红线表示电流流动

蓝色显示我想要实现的流程

我有三个列,分别名为“待办事项”、“进行中”和“完成”。目前我可以使用cdkDropListConnectedTo将一个项目从To Do拖到In Progress,从In Progress拖到Done,从Done拖回To do。

我想知道谁可以将项目从“完成”移动到“待办”和“进行中”,同样如何将项目从“进行中”移动到“完成”和“待办”从“完成”到“进行中”和“待办事项”。

我想到的第一件事是将多个引用传递给cdkDropListConnectedTo,但这不起作用。如果有人能指出正确的方向,我将不胜感激。

谢谢

这是我到目前为止所写的: https://stackblitz.com/edit/angular-mpedfr?file=src%2Fapp%2Fapp.component.html

【问题讨论】:

标签: angular typescript angular-material angular-material2 angular-cdk


【解决方案1】:

您现在可以使用具有 cdkDropListGroup 属性的全局容器,其中所有具有 cdkDropList 属性的子容器都链接在一起,无需添加所有 [cdkDropListConnectedTo] 的东西

<div cdkDropListGroup>
    <div cdkDropList>
        <div cdkDrag>Drag Me</div>
    </div>
    <div cdkDropList>
        <div cdkDrag>Drag Me Also</div>
    </div>
    ...
</div>

【讨论】:

    【解决方案2】:

    原来 DragDropscdkDropListConnectedTo 连接到不同的拖放区,例如

    [cdkDropListConnectedTo]="[inProgress, done]"

    完整示例:https://stackblitz.com/edit/angular-mpedfr

    【讨论】:

    • 你现在也可以使用cdkDropListGroup,这里提到stackoverflow.com/a/55159048/6816518
    • 你能分享一个通过id连接的例子吗?我尝试采用文档但没有成功。
    • 如果您将cdkDropListid 设置为已知字符串,并且您尝试将cdkDropListConnectedTo 设置为另一个列表,则需要将该值设置为字符串[cdkDropListConnectedTo]="['inProgress', 'done']"。所示示例要求inProgress 是组件中的字符串变量,或对 cdkDropList 的引用。
    【解决方案3】:

    您可以连接到多个容器,例如:

    [cdkDropListConnectedTo]="[doneList,doneList1]"

    【讨论】:

      【解决方案4】:

      在 cdkDropListConnectedTo 中引用拖放区

          <div class="board">
            <div class="lane lane-1" 
              cdkDropList 
              #todo="cdkDropList"
              [cdkDropListData]="toDoList"
              [cdkDropListConnectedTo]="[inProgress, done]"
              (cdkDropListDropped)="drop($event)"
              >
              <div class="heading todo">To Do</div>
              <div *ngFor="let item of toDoList" class="task"
                 cdkDrag>{{item}}</div>
            </div>
      
            <div class="lane lane-2" 
              cdkDropList 
              #inProgress="cdkDropList"
              [cdkDropListData]="inProgressList"
              [cdkDropListConnectedTo]="[done,todo]"
              (cdkDropListDropped)="drop($event)"
              >
              <div class="heading doing">In Progress</div>
              <div *ngFor="let item of inProgressList" class="task" cdkDrag>{{item}}</div>
            </div>
      
            <div class="lane lane-2" 
              cdkDropList 
              #done="cdkDropList"
              [cdkDropListData]="doneList"
              [cdkDropListConnectedTo]="[todo,inProgress]"
              (cdkDropListDropped)="drop($event)"
              >
              <div class="heading done">Done</div>
              <div *ngFor="let item of doneList" class="task" cdkDrag>{{item}}</div>
            </div>
      

      【讨论】:

      • 请注意,您确实需要参考“双向”。您不能只将cdkDropListConnectedTo 放在列表 A 上指向列表 B,还需要让列表 B 指向列表 A(老实说,这很痛苦!)
      猜你喜欢
      • 1970-01-01
      • 2019-04-24
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 2020-09-29
      相关资源
      最近更新 更多