我有一个拖放列表的嵌套树(不是树组件)。
在另一个放置在另一个放置列表中的放置列表中拖动项目时,两个放置列表均会触发Enter / Exit事件,这意味着当放置一个项目时,它可以放置到内部放置列表或容器中放置列表,具体取决于放置的位置(注意:这些列表相互链接)
我现在正在考虑,如果拖动当前位于内部列表上,则最好的解决方案将是针对容器列表触发抑制事件,但是我不确定这是否是最佳解决方案或确切的操作方法此刻。
答案 0 :(得分:0)
此解决方案的问题在于谓词不会影响拖动起源的CdkDropList中已经进行的拖动。
这是一个问题,因为在将对象“向上”移动到层次结构的过程中(由于谓词功能),例如,移动同级下的一个项目,在层次结构中“向下”移动导致不可避免的2个CdkDropLists区域重叠,导致比赛状态。
这是需要解决的主要问题-如何随意告诉父级CdkDropList'停止考虑'CdkDrag(对拖动进行反应),同时仍然能够将其有效地放入子级CdkDropList中
或者换句话说-使所有CdkDropLists被指针位置标记的X,Y的Z轴刺穿,选择一个面积最小的区域(“最大”),并使其余区域对当前拖动“无响应”。 / p>
答案 1 :(得分:-1)
我确实设法找到了解决方案,尽管它确实很麻烦,并且涉及使用Angular拖放CDK访问私有值。
我使用cdkDropListEnterPredicate函数检查应该尝试插入的列表,并分配canDropPredicate函数。
我还被迫通过以下方式访问指针位置:_pointerPositionAtLastDirectionChange不好,因为并非我希望看到的所有值都传递给了cdkDropListEnterPredicate。
Access Control (IAM)