Javascript 如何在Angular UI树中克隆节点?

Javascript 如何在Angular UI树中克隆节点?,javascript,angularjs,angular-ui-tree,Javascript,Angularjs,Angular Ui Tree,如何克隆包含所有子节点的Angular UI树中的节点 现在我使用事件单击:ng click=“newSubItem(this)”其中newSubItem是函数: $scope.newSubItem = function (scope) { var nodeData = scope.$modelValue; var arrr_nodes = []; angular.forEach(nodeData

如何克隆包含所有子节点的Angular UI树中的节点

现在我使用事件单击:
ng click=“newSubItem(this)”
其中
newSubItem
是函数:

$scope.newSubItem = function (scope) {

                var nodeData = scope.$modelValue;
                var arrr_nodes = [];

                angular.forEach(nodeData.nodes, function (value) {
                    arrr_nodes.push(arrr_nodes);
                });

                var total_nodes = nodeData.nodes.length;
                var prefix_increment = total_nodes + 1;

                nodeData.nodes.push({
                    id: nodeData.id + prefix_increment,
                    prefix: nodeData.prefix + "_" + prefix_increment,
                    title: nodeData.title + '.' + (nodeData.nodes.length + 1),
                    value: nodeData.value,
                    type: nodeData.type,
                    nodes: arrr_nodes
                });
            };

当我尝试将克隆对象中的所有子对象插入到新的
节点:节点:arrr_节点时,会出现许多错误并破坏树。

我不完全清楚您在
newSubItem
函数中尝试执行的操作——它不会返回任何内容,因此不清楚其目的是什么

但你不是在克隆对象,而是在

  • 复制对象引用(
    nodeData
    只是对
    scope.$modelValue
    的引用,因此如果modelValue以后更改,那么
    nodeData
    也会更改)和
  • 创建循环数据结构(通过将数组推到自身上,
    arrr_节点。推(arrr_节点);
这两个都不是你想要的

为了回答您提出的问题,如果您正试图对对象进行深度克隆,Angular提供了
Angular.copy()
,它正是这样做的。如果您的意图是将
nodeData
克隆为
modelValue
,则只需

$scope.newSubItem = function (scope) {
    var nodeData = angular.copy(scope.$modelValue);
    // presumably now you would do something useful with nodeData
}

你能解释一下,为什么示例中的输入字段有效,而我的输入字段无效吗?Angular.copy对对象进行了深度克隆,看起来你的代码只是引用原始arr_节点进行复制。你能分享一个示例吗。。。