【问题标题】:Angular Drag & Drop: cdkDrag item dropping in nested cdkDropLists角度拖放:cdk 将项目拖放到嵌套的 cdkDropList 中
【发布时间】:2021-09-19 19:47:11
【问题描述】:

Stackblitz 展示问题:https://stackblitz.com/edit/angular-ivy-tzyvbe?file=src%2Fapp%2Fapp.component.html

我有一个外部 cdkDropListGroup,内部有两个 cdkDropLists。

第一个 cdkDropList 中还有两个下拉列表。

我希望能够将 cdkDrag 项拖放到第一个 cdkDropList 中,如果拖放到其中,也可以拖放到其中的嵌套 cdkDropLists 中。

您可以看到我正在记录您将项目放入的 dropList,它始终是外部 droplist id。

我怎样才能放入嵌套的下拉列表中,或者这是否可能?

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: angular angular-cdk angular-cdk-drag-drop


【解决方案1】:

您应该使用cdkDropList[cdkDropListConnectedTo] 属性来指定可以将容器的物品转移到的其他连接容器。 cdkDropListGroup 自动为其子代执行此操作。这是您的 stackblitz 中经过编辑的示例代码。

<div cdkDropListGroup>
  <div cdkDropList class="page-list-1" (cdkDropListEntered)="drop('page')">
    <div
      cdkDropList
      id="dropList1"
      class="page-list-2"
      (cdkDropListEntered)="drop('list-1')"
    ></div>

    <div
      cdkDropList
      id="dropList2"
      class="page-list-3"
      (cdkDropListEntered)="drop('list-2')"
    ></div>
  </div>

  <div
    cdkDropList
    [cdkDropListConnectedTo]="['dropList1', 'dropList2']"
    class="components"
  >
    <div cdkDrag class="item">Hi</div>
  </div>
</div>

【讨论】:

  • 谢谢,这在这种情况下有效。我已经更新了我的堆栈闪电战。我遇到了同样的问题,但现在我将列表作为组件。当它们位于单独的组件中时,它们似乎没有连接
  • 问题在于组件的生命周期。您正在列表组件的ngOnInit 中动态生成 id,让父组件一次定义所有 id 并将它们作为输入传递给列表组件以用作 cdkDropList 的 id。您还将为 [cdkDropListConnectedTo] 定义 id 列表,而不必使用 idService
  • 您的(cdkDropListEntered) 事件也总是将'page' 记录到控制台。不要让它愚弄你。将其更改为从父级传递的id 以查看它是否正常工作。
  • 好的,但是现在它正在从服务中获取 ID,每当添加新 ID 时,该服务都会获取更新的列表(我同意让父级将 ID 传递给孩子,但 cdkDropListConnectedTo 当前正在获取更新的 ids 数组。当输入更新时 cdkDropListConnectedTo 指令没有正确更新 ids 会不会是某种问题?
  • 我已将其更新为。生成了 ID,然后将其传递给列表,但它仍然无法放入嵌套的下拉列表中。 (我也修复了它,所以它记录了正确的 id 而不仅仅是“页面”)
猜你喜欢
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 2020-08-16
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
相关资源
最近更新 更多