2014-11-23 21 views
11

我目前使用angular-ui-tree庫,我想實現以下行爲:角JS(角UI樹)NG單擊衝突VS牽引起動事件

當用戶只需點擊「拖動節點」上觸發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> 

目前的行爲是拖歐米茄下降立即開始對「鼠標按下」並沒有辦法從試圖區分「點擊」開始拖動

這裏是庫代碼觸發節點的拖N - 下降 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

我只是有相同的ISSU e和我通過增加數據拖累延遲至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 2016-07-30 06:33:17