2013-08-24 16 views
4

我有一個具有遞歸關係(樹視圖,使用遞歸)的數據集的應用程序。我嘗試了幾種方法來通過Angular實現這一點,沒有一個似乎會產生可行的結果。如何處理使用AngularJS的數據遞歸呈現

這裏的想法是,我希望使用一組嵌套列表呈現這些數據,並允許多個(7+)級別的深度。爲了簡化的東西(我的實際應用程序使用Restangular)我已經建立了以下plunker:雖然「頂」級數據正確渲染(只是第一題)我試圖使用遞歸嵌套的控制器似乎

http://plnkr.co/edit/dKT9OvpsMgnxmLwgF0ij

悲慘地失敗。這裏的想法是,樹中的每個「孩子」都使用它自己的控制器來呈現,然後可以呈現它的孩子,等等。我意識到嵌套控制器可能不是「最好」的方式,但經過多次搜索,我還沒有找到「更好」的選擇。

重要的是,得到的溶液保留的「嵌套」在這裏的概念(出現它的父元素下面的每個元素,有輕微的凹痕。)

+0

你見過這個https://開頭gist.github.com/furf/4331090,http://stackoverflow.com/questions/15661289/how-can-i-make-recursive-templates-in-angularjs-when-using-nested-objects。 – Chandermani

回答

12

,而不是窩你的控制器,巢中的數據,只是有一個控制器。

該視圖由遞歸引用自身的模板處理。

正如chadermani所說,那裏有一些答案。

這裏是一個很好的例子,一個小提琴(不是我的代碼)

http://jsfiddle.net/brendanowen/uXbn6/8/

,並從小提琴

<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> 
    <ul> 
     <li ng-repeat="data in data.nodes" ng-include="'tree_item_renderer.html'"></li> 
    </ul> 
</script> 

<ul ng-app="Application" ng-controller="TreeController"> 
    <li ng-repeat="data in tree" ng-include="'tree_item_renderer.html'"></li> 
</ul> 

angular.module("myApp", []). 
controller("TreeController", ['$scope', function($scope) { 
    $scope.delete = function(data) { 
     data.nodes = []; 
    }; 
    $scope.add = function(data) { 
     var post = data.nodes.length + 1; 
     var newName = data.name + '-' + post; 
     data.nodes.push({name: newName,nodes: []}); 
    }; 
    $scope.tree = [{name: "Node", nodes: []}]; 
}]); 
+0

我試過了 - 但它不適用於當前版本的角度(它是用舊版本編寫的)。我使用最新版本的角度創建了JSFiddle,並在http://jsfiddle.net/PLRCz上使用相同的代碼/ - 除了它不能使用角度1.2,這是一個很好的解決方案! – chander

+0

爲我工作與最新的穩定的角度http://jsfiddle.net/uXbn6/388/ – Anton

+0

謝謝。我已經降級到較早的不穩定版本,它可以工作。看起來它在Angular 1.2中已經崩潰了 – chander