如何在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
});
};
当我尝试将克隆对象中的所有子项插入新nodes: nodes: arrr_nodes
时,会出现很多错误并中断树。
答案 0 :(得分:1)
我并不完全清楚你在newSubItem
函数中尝试做什么 - 它没有返回任何内容,所以它并不明显是什么目的是。
但是你没有克隆对象,而是你
nodeData
只是对scope.$modelValue
的引用,因此如果modelValue稍后更改,那么nodeData
)和arrr_nodes.push(arrr_nodes);
),这两者都不是你想要的。
要回答您提出的问题,如果您尝试对某个对象进行深层克隆,Angular会提供angular.copy()
这样做。如果您的目的是让nodeData
成为modelValue
的克隆,那么您只需要
$scope.newSubItem = function (scope) {
var nodeData = angular.copy(scope.$modelValue);
// presumably now you would do something useful with nodeData
}