问题 Angular JS(angular-ui-tree)ng-click冲突与拖动开始事件


我目前正在使用 角-UI-树 库我正试图实现以下行为:

当用户只需单击“可拖动节点”时,它会触发ng-click功能,如果用户单击并开始拖动,则忽略ng-click并开始常规拖放操作。

我有以下html结构:

<div ui-tree="rootTree" ng-controller="Controller">
    <div ui-tree-nodes="" ng-model="nodes">
        <div ng-repeat="node in nodes" ui-tree-node="" ng-click="selectNode(node)" >
            <div ui-tree-handle="">
            ...
            </div>
        </div>
    </div>
</div>

当前的行为是'mousedown'上的drag-n-drop立即开始,并且没有办法区分'click'和尝试开始拖动

这是触发节点拖放的库代码 uiTreeNode.js

var bindDrag = function() {
   element.bind('touchstart mousedown', function (e) {
   if (!scope.$treeScope.multiSelect) {
      dragDelaying = true;
      dragStarted = false;
      dragTimer = $timeout(function() {
         dragStartEvent(e);
         dragDelaying = false;
      },    scope.$treeScope.dragDelay);
   } else {
      toggleSelect(e);
   }
   });
   element.bind('touchend touchcancel mouseup', function() {
      $timeout.cancel(dragTimer);
   });
};

10440
2017-11-23 11:52


起源



答案:


我只是遇到了同样的问题,我通过将数据拖动延迟增加到100来解决它,尝试:

ui-tree="rootTree" ng-controller="Controller" data-drag-delay="100"


10
2017-12-30 16:47





这是一个很老的问题,但如果你不想有延迟,你可以注册 dropped() 如果索引没有更改,则回调并执行您的单击操作。例如:

dropped: function(event){
    //if element was not moved, use click event
    if(event.source.index == event.dest.index){
        $scope.someAction();
    }
}

1
2018-05-30 14:14



在哪里写这段代码 - Coder


答案:


我只是遇到了同样的问题,我通过将数据拖动延迟增加到100来解决它,尝试:

ui-tree="rootTree" ng-controller="Controller" data-drag-delay="100"


10
2017-12-30 16:47





这是一个很老的问题,但如果你不想有延迟,你可以注册 dropped() 如果索引没有更改,则回调并执行您的单击操作。例如:

dropped: function(event){
    //if element was not moved, use click event
    if(event.source.index == event.dest.index){
        $scope.someAction();
    }
}

1
2018-05-30 14:14



在哪里写这段代码 - Coder