Angular 角度4素描树拖放复制到

Angular 角度4素描树拖放复制到,angular,typescript,tree,treeview,primeng,Angular,Typescript,Tree,Treeview,Primeng,几天来,我一直在使用PrimeNg的树模块,我一直在为几乎所有我想让它做的事情编写自定义功能。但是,由于回调被称为后期处理,我的自定义copyTo函数中的对象引用仍然存在问题 因此,我正在寻找一种优雅的方式来中断拖放处理程序,以便能够深入复制数据以进行更精细的控制。我觉得我应该考虑扩展这个类,这样我就可以覆盖插件的功能,但我不确定这是否会在升级时造成更大的伤害 非常感谢您的任何建议或“如何”建议 下面的代码获取具有已知索引的元素,并将其重新插入到从中拖动的树中,从而从一棵树复制到另一棵树。但是,

几天来,我一直在使用PrimeNg的树模块,我一直在为几乎所有我想让它做的事情编写自定义功能。但是,由于回调被称为后期处理,我的自定义
copyTo
函数中的对象引用仍然存在问题

因此,我正在寻找一种优雅的方式来中断拖放处理程序,以便能够深入复制数据以进行更精细的控制。我觉得我应该考虑扩展这个类,这样我就可以覆盖插件的功能,但我不确定这是否会在升级时造成更大的伤害

非常感谢您的任何建议或“如何”建议

下面的代码获取具有已知索引的元素,并将其重新插入到从中拖动的树中,从而从一棵树复制到另一棵树。但是,这只适用于已知索引,不支持不同深度的嵌套节点

    copyToTree: any = []; // tree obj cache
    staticTree: any = []; // tree obj cache

    // Fires when node is dropped on copyToTree
    dropOnCopyTo(event: any) {
        let dragged: any = event.dragNode;

        if(dragged.field_name == null) { // dragged from staticTree
            // re-add copy to correct position in staticTree
            let copy: any = this.deepCopy(dragged);
            this.staticTree.children.splice(copy.index, 0, copy);
            // Update field_name of dragged in copyToTree
            dragged.field_name = 'new_' + Date.now();
        }
    }

在与另一位开发人员合作后,我们发现我们只需要一个适当的深度副本,它可以处理循环引用,因为TreeNode.parent.children数组包含原始TreeNode对象的引用

public deepCopy(oldObj: any) {
    // Using jquery for its extensive error checking
    return $.extend(true, {}, oldObj);
}

这使得TreeNode可以拼接回“from”树,而不必绑定对象引用。

与另一位开发人员合作后,我们发现,由于TreeNode.parent.children数组包含原始TreeNode对象的引用,我们只需要一个能够处理循环引用的适当深度副本

public deepCopy(oldObj: any) {
    // Using jquery for its extensive error checking
    return $.extend(true, {}, oldObj);
}

这使得TreeNode可以在没有对象引用的情况下拼接回“from”树。

您可以发布您迄今为止尝试过的代码吗?使用我当前的复制功能更新,但如上所述,它不支持非静态树节点复制。您可以发布您迄今为止尝试过的代码吗?使用我当前的复制功能更新,但如上所述,它不支持非静态树节点复制