2017-06-11 4 views
0

角のあるUIツリー内のノードをすべての子ノードで複製する方法はありますか?Angular UIツリーでノードを複製する方法は?

は今、私はイベントのクリックを使用します。

$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 
       }); 
      }; 

私は新しいnodes: nodes: arrr_nodesにクローン化されたオブジェクトからすべての子を挿入しようと、それはエラーの多くを与え、木を壊し:newSubItemが関数であるng-click="newSubItem(this)"

+0

https://docs.angularjs.org/api/ng/function/angular.copy –

+0

あなたは私を説明することができ、なぜ例の入力フィールドは機能していますが、私はそうではありませんか? – Oleg

+0

Angular.copyはオブジェクトの深いクローンを作成します。元のarr_nodesへの参照をコピーするだけです。 –

答えて

1

newSubItemの機能の中で何をしようとしているのかは完全にはっきりしていません。何も返されないので、その目的がはっきりしません。

しかし、あなたは

  • コピーオブジェクト参照(nodeDatascope.$modelValueへの参照のみなので、modelValueはそうnodeData意志に後で変更した場合)と
  • 作成している代わりに、オブジェクトのクローンを作成していません循環データ構造(配列をそれ自身にプッシュすることによって、arrr_nodes.push(arrr_nodes);)、

いずれもおそらくあなたが望むものではありません。

あなたの質問に答えるには、オブジェクトの深いクローンを作成しようとしている場合、Angularはangular.copy()を提供します。 nodeDatamodelValueのクローンであるために、あなたの意図がある場合は、あなたが必要とするすべてはある

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