2015-09-09 50 views
0

所以,我有jsfiddle here

我们可以添加新节点并删除父节点中的所有子节点。但是,我怎样才能删除特定的孩子没有迭代数组?我知道,我们可以使用:

Array.prototype.splice() 

如果我们要删除,例如,这个对象(截图#1),我们可以得到它的索引和使用拼接()。

enter image description here

但是,如果我想删除深度嵌套的对象,我不想迭代数组,并使用拼接(),因为性能比较的。

enter image description here

在我的控制台我只得到:

Object { name: "Node-8-6-2", menu: false, $$hashKey: "object:151" } 

而且我不具有对父阵列的节点的访问。我需要迭代所有数组,以便我可以将其删除。

有人知道这个问题的解决方案吗?

+0

是有删除的对象中有任何索引属性 – harishr

+0

不,只有$ index,但它在这里不起作用,因为我们有很多嵌套数组。例如,我将拥有该特定ID。我如何使用它删除元素? –

回答

1

这里是你的抢劫者更新。 http://jsfiddle.net/marduke182/uXbn6/2828/

小的变化是:

添加到使用parentNodes对象的父引用。

$scope.add = function(data) { 
     var post = data.nodes.length + 1; 
     var newName = data.name + '-' + post; 
     data.nodes.push({name: newName,nodes: [], parentNodes: data.nodes}); 
    }; 

创建方法删除节点,并通过$指数,做拼接,以给定的索引属性父:

$scope.delete_node = function(data, index) { 
     data.parentNodes.splice(index, 1); 
    }; 

添加新的方法到模板:

<script type="text/ng-template" id="tree_item_renderer.html"> 
    {{data.name}} 
    <button ng-click="add(data)">Add node</button> 
    <button ng-click="delete(data)" ng-show="data.nodes.length > 0">Delete nodes</button> 
    <button ng-click="delete_node(data, $index)" >Delete node {{$index}}</button> 
    <ul> 
     <li ng-repeat="data in data.nodes" ng-include="'tree_item_renderer.html'"></li> 
    </ul> 
</script> 
1

当你建立你的嵌套的树状结构,你可以在parent属性添加到您的数组:

var parentNode = []; 
var node = []; 
node.parent = parentNode; 
parentNode.push(node); 

现在,如果你想删除node,你可以说:

var index = node.parent.indexOf(node); 
node.parent.splice(index, 1);