0

我正在开发一个树视图来显示使用 AngularJS 的类别列表。我使用了这个git 存储库。

HTML

<div ui-tree="treeOptions" id="tree-root" data-drag-enabled="true">
    <ol ui-tree-nodes ng-model="nodes">
        <li ng-repeat="node in nodes"  
            ui-tree-node 
            data-type="top-level" 
            ng-include="'nodes_renderer.html'"></li>
    </ol>
</div>

我能够在树中实现拖放元素。我想将拖放功能限制为仅同级元素。

我在下面尝试过,但仍然没有运气。

JS

$scope.treeOptions = {

    accept: function (sourceNodeScope, destNodesScope, destIndex) {

        if (sourceNodeScope.$parent.$id === destNodesScope.$parent.$id)
            return true;
        else
            return false;

    }
}

我在 GitHub 存储库上找不到太多关于此要求的信息。非常感谢任何帮助或有用的链接。

4

1 回答 1

1

您的逻辑基本没问题,但是您使用的回调不是正确的。Angular-ui-tree 有一个beforeDrop回调,允许您返回一个承诺,并根据结果接受或拒绝丢弃。accept每次越过另一个节点时,实际上都会在拖动时调用回调。这是一个简单的示例实现:

$scope.treeOptions = {
        beforeDrop : function (e) {
          if (e.source.nodesScope.$parent.$id === e.dest.nodesScope.$parent.$id) {
            console.log("siblings, this is allowed");
            return $q.resolve();
          }
          else {
            console.log("not siblings");
            window.alert("Not siblings! Reject this drop!");
            return $q.reject();
          }
        }
     };

这是 plunkr 显示一个简单的例子:http ://plnkr.co/edit/6PD6PrD3wRduOjOQzuFN

于 2018-10-10T08:57:16.997 回答