2014-11-23 2 views
11

나는 현재 angular-ui-tree 라이브러리를 사용하고 내가 다음과 같은 동작을 달성하기 위해 노력하고 끌기 시작 이벤트 대 충돌 NG 클릭 ng-click 기능, 사용자가 클릭하여 드래그를 시작하면 ng-click이 무시되고 일반 drag-n-drop이 시작됩니다.각도 JS (각-UI-트리)

나는 다음과 같은 한 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'에 즉시 시작하고 드래그 시작하려고에서 '클릭'을 구별 할 수있는 방법이없는 것입니다

여기

난 그냥 같은 문 제를 가지고 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); 
    }); 
}; 

답변

9

노드의 드래그 앤 드롭을 트리거 라이브러리 코드 E 및 I (100)에 데이터를 드래그 지연을 증가시켜 그것을 해결, 시도 :

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

1

그것은 아주 오래된 질문이다,하지만 당신은 지연이하지 않으려는 경우 dropped() 콜백을 등록하고 실행할 수 있습니다 인덱스가 변경되지 않은 경우 작업을 클릭하십시오. 예 :

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

이 코드를 작성하려면 – Coder