diff --git a/src/directives/drag-events.js b/src/directives/drag-events.js index 0f31cb6..f47c760 100644 --- a/src/directives/drag-events.js +++ b/src/directives/drag-events.js @@ -7,8 +7,14 @@ angular.module('flow.dragEvents', ['flow.init']) return { 'scope': false, 'link': function(scope, element, attrs) { - element.bind('drop dragover', function (event) { + var drop = function(event) { event.preventDefault(); + } + + element.bind('drop dragover', drop); + + scope.$on('$destroy', function() { + element.unbind('drop dragover', drop); }); } }; @@ -23,24 +29,36 @@ angular.module('flow.dragEvents', ['flow.init']) 'link': function(scope, element, attrs) { var promise; var enter = false; - element.bind('dragover', function (event) { - if (!isFileDrag(event)) { - return ; - } - if (!enter) { - scope.$apply(attrs.flowDragEnter); - enter = true; - } - $timeout.cancel(promise); - event.preventDefault(); - }); - element.bind('dragleave drop', function (event) { - promise = $timeout(function () { - scope.$eval(attrs.flowDragLeave); - promise = null; - enter = false; - }, 100); + + var dragOver = function(event) { + if (!isFileDrag(event)) { + return ; + } + if (!enter) { + scope.$apply(attrs.flowDragEnter); + enter = true; + } + $timeout.cancel(promise); + event.preventDefault(); + } + + element.bind('dragover', dragOver); + + var dragLeave = function(event) { + promise = $timeout(function () { + scope.$eval(attrs.flowDragLeave); + promise = null; + enter = false; + }, 100); + } + + element.bind('dragleave drop', dragLeave); + + scope.$on('$destroy', function() { + element.unbind('dragover', dragOver); + element.unbind('dragleave drop', dragLeave); }); + function isFileDrag(dragEvent) { var fileDrag = false; var dataTransfer = dragEvent.dataTransfer || dragEvent.originalEvent.dataTransfer; @@ -53,4 +71,4 @@ angular.module('flow.dragEvents', ['flow.init']) } } }; - }]); \ No newline at end of file + }]);