2017-05-04 68 views
0

我已经在选择div时将活动类设置为div,但现在我想在选择新的div时删除先前的活动类。从选择新div的前一个div中删除活动类

但在这里我没有得到如何从先前选定的div中删除活动类。

源代码生成树状结构:http://jsfiddle.net/brendanowen/uXbn6/8/

模板:

<table ng-repeat="data in tree track by $index"> 
    <tbody> 
     <div ng-click="setDivActive(data)" ng-class="{'active': data.selected}"></div> //This div will be selected 
    </tbody> 
    </table> 

<script type="text/ng-template" id="tree_item_renderer.html"> 
<button ng-click="add(data)">Add node</button> 
<table ng-repeat="data in data.nodes" id="tree_item_renderer.html"> 
    <tbody> 
     <div ng-click="setDivActive(data)" ng-class="{'active': data.selected}"></div> //This div will be selected 
    </tbody> 
</table> 
</script> 

控制器:

$scope.tree = [{name: "Node", nodes: [],selected:false}]; 
$scope.addNode = function (data) { 
     var post = data.nodes.length + 1; 
     var newName = data.name + '-' + post; 
     data.nodes.push({ name: newName, nodes: [],selected:false }); 
    }; 

$scope.setDivActive= function (data) { 
     data.selected = true; 
    }; 

回答

1

之前你设定的新项目的选择之一,遍历整个集合,并将它们全部设置为'not sel ected“:

function clearSelected(items) { 
    items.forEach(function(item) { 
     item.selected = false; 
     if (item.nodes) { 
      clearSelected(item.nodes); 
     } 
    }); 
} 

$scope.setDivActive= function (data) { 
    clearSelected($scope.tree); 
    data.selected = true; 
}; 
+0

它不工作的嵌套结构。 –

+0

我真的不明白你的嵌套结构应该如何工作,但你需要做一个递归函数,然后 –

+0

更新我的答案是嵌套结构的递归,你可能需要调整它,因为我真的不知道如何你的树结构应该看起来 –