Chcę utworzyć strukturę podobną do drzewa, w której użytkownik może przeciągać i upuszczać liście. Mam punkt wyjścia w następujący sposób:AngularJS - Jak utworzyć drzewo przeciągalne?
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>
coffeescript
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']
Kod jest w tym JSFiddle także: http://jsfiddle.net/bESrf/1/
Na moje „prawdziwe "Kod, zamiast tylko jednego poziomu dla dzieci, wyodrębniłem drugi <ul>
do szablonu i renderowane rekurencyjnie, co działa dobrze, ale nie mogłem znaleźć sposobu, aby to zrobić w JSFiddle.
Jaki byłby najlepszy sposób renderowania go rekurencyjnie i nadal pozwala na przeciąganie i upuszczanie, które zmieniłoby tablicę obiektów i pod-obiektów reprezentowanych przez model-ng?
Wow, dzięki za to! Dam ci szansę i dam ci znać. – kolrie
Dobra robota !! Uwielbiam _pregnant_ class :) – null
** FYI ** - To nie działa w IE, jak jest ... Aby to działało w IE10 zmień: 'cursor = parentNode.childNodes [i];' ** to be * * 'cursor = parentNode.childNodes [i]? parentNode.childNodes [i]: null; ' Wyobraź to sobie dzięki [ta odpowiedź] (http://stackoverflow.com/questions/9377887/ie-doesnt-support-insertbefore) – JustMaier