【发布时间】:2021-09-10 13:14:45
【问题描述】:
我想将 DragDropModule 用于我的 Angular 应用程序,这样我就可以移动存储在 模板 中的面板(出于实际目的以及递归绘制子元素)。
我遇到的问题是,如果 cdkDrag 隐藏在模板中并且没有直接嵌套在 HTML 元素下,则 cdkDrag 找不到要放入的正确 cdkDropList。示例:
<div
cdkDropList
[cdkDropListData]="expanded.activities"
(cdkDropListDropped)="dropActivity($event)">
<div *ngFor="let activity of expanded.activities">
<ng-container [ngTemplateOutlet]="orangeProgramActivity"></ng-container>
</div>
</div>
<ng-template #orangeProgramActivity>
<div cdkDrag>This is just a test</div>
</ng-template>
使用此代码示例,可以将 orangeProgramActivity 拖动到任何地方,但不会拖放到正确的 dropList 中,因为 cdkDrag 关键字无法在其自己的模板中找到任何 droplist。
在第二个示例中,一切正常,项目被放入正确的 dropList:
<div
cdkDropList
[cdkDropListData]="expanded.activities"
(cdkDropListDropped)="dropActivity($event)">
<div *ngFor="let activity of expanded.activities">
<div cdkDrag>This is just a test</div>
</div>
</div>
我想实现与第二个示例相同的功能,但使用模板,因为我确实需要它们进行递归。不幸的是,我无法透露整个代码,因为我的雇主不会对此感到满意。
我需要的只是模板内的 cdkDrag 的一些静态引用,以使用模板外的 dropList 指向正确的元素。
这些是我在互联网上找到的唯一解决方案,它们似乎对我不起作用: Material 7 Drag and Drop ng-template incompatibility CdkDragDrop and ngTemplateOutlet
这是我关于 Stack Overflow 的第一个问题,而且我是 Angular 新手,所以对于我的帖子中的任何混淆,我深表歉意,并提前感谢您的帮助!
【问题讨论】:
标签: html angular typescript