Ich möchte eine baumähnliche Struktur erstellen, wo der Benutzer Blätter ziehen und ablegen kann. Ich habe einen Ausgangspunkt wie folgt dar:AngularJS - Wie macht man einen ziehbaren Baum?
HTML
<div ng:controller="controller">
<ul ui-sortable ng-model="items" ui-options="{connectWith: '.item'}" class="item">
<li ng-repeat="item in items" class="item">
{{ item.name }}
<ul ui-sortable ng-model="item.children" ui-options="{connectWith: '.item'}" class="item">
<li ng-repeat="item in item.children" class="item">{{ item.name }}</li>
</ul>
</li>
</ul>
<pre>{{ items | json }}</pre>
</div>
<script src="http://code.angularjs.org/1.0.2/angular.min.js"></script>
<script src="https://raw.github.com/angular-ui/angular-ui/master/build/angular-ui.min.js"></script>
Coffee
myapp = angular.module 'myapp', ['ui']
myapp.controller 'controller', ($scope) ->
$scope.items = [
{id: 1, name: 'Item 1', children: [
{id: 5, name: 'SubItem 1.1', children: [
{id: 11, name: 'SubItem 1.1.1', children: []},
{id: 12, name: 'SubItem 1.1.2', children: []}
]},
{id: 6, name: 'SubItem 1.2', children: []}
]},
{id: 2, name: 'Item 2', children: [
{id: 7, name: 'SubItem 2.1', children: []},
{id: 8, name: 'SubItem 2.2', children: []}
{id: 9, name: 'SubItem 2.3', children: []}
]},
{id: 3, name: 'Item 3', children: [
{id: 10, name: 'SubItem 3.1', children: []}
]}
]
angular.bootstrap document, ['myapp']
Der Code in diesem JSFiddle ist auch: http://jsfiddle.net/bESrf/1/
Auf meinem „real "Code, anstatt nur eine Ebene für Kinder, extrahierte ich die zweite <ul>
in eine Vorlage und es rekursiv gerendert, was gut funktioniert, aber ich konnte keinen Weg finden, es in JSFiddle zu tun.
Was wäre der beste Weg, um es rekursiv zu rendern und trotzdem Drag & Drop zu erlauben, was das Array von Objekten und Unterobjekten, die durch ng-model dargestellt werden, verändern würde?
Wow, danke dafür! Ich werde es versuchen und dich wissen lassen. – kolrie
Gute Arbeit !! Ich liebe die _pregnant_ class :) – null
** FYI ** - Dies funktioniert nicht im IE wie es ist ... Um es in IE10 arbeiten zu lassen, ändern: 'cursor = parentNode.childNodes [i];' ** sein * * 'cursor = parentNode.childNodes [i]? parentNode.childNodes [i]: null; ' Ich habe das herausgefunden dank [dieser Antwort] (http://stackoverflow.com/questions/9377887/ie-doesnt-support-insertbefore) – JustMaier