Skip to content

Commit 865b845

Browse files
committed
Merge pull request #85 from jlcarvalho/patch-1
fix: removing bindings to avoid memory leaks
2 parents 93d8825 + 1283d77 commit 865b845

File tree

1 file changed

+37
-19
lines changed

1 file changed

+37
-19
lines changed

src/directives/drag-events.js

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,14 @@ angular.module('flow.dragEvents', ['flow.init'])
77
return {
88
'scope': false,
99
'link': function(scope, element, attrs) {
10-
element.bind('drop dragover', function (event) {
10+
var drop = function(event) {
1111
event.preventDefault();
12+
}
13+
14+
element.bind('drop dragover', drop);
15+
16+
scope.$on('$destroy', function() {
17+
element.unbind('drop dragover', drop);
1218
});
1319
}
1420
};
@@ -23,24 +29,36 @@ angular.module('flow.dragEvents', ['flow.init'])
2329
'link': function(scope, element, attrs) {
2430
var promise;
2531
var enter = false;
26-
element.bind('dragover', function (event) {
27-
if (!isFileDrag(event)) {
28-
return ;
29-
}
30-
if (!enter) {
31-
scope.$apply(attrs.flowDragEnter);
32-
enter = true;
33-
}
34-
$timeout.cancel(promise);
35-
event.preventDefault();
36-
});
37-
element.bind('dragleave drop', function (event) {
38-
promise = $timeout(function () {
39-
scope.$eval(attrs.flowDragLeave);
40-
promise = null;
41-
enter = false;
42-
}, 100);
32+
33+
var dragOver = function(event) {
34+
if (!isFileDrag(event)) {
35+
return ;
36+
}
37+
if (!enter) {
38+
scope.$apply(attrs.flowDragEnter);
39+
enter = true;
40+
}
41+
$timeout.cancel(promise);
42+
event.preventDefault();
43+
}
44+
45+
element.bind('dragover', dragOver);
46+
47+
var dragLeave = function(event) {
48+
promise = $timeout(function () {
49+
scope.$eval(attrs.flowDragLeave);
50+
promise = null;
51+
enter = false;
52+
}, 100);
53+
}
54+
55+
element.bind('dragleave drop', dragLeave);
56+
57+
scope.$on('$destroy', function() {
58+
element.unbind('dragover', dragOver);
59+
element.unbind('dragleave drop', dragLeave);
4360
});
61+
4462
function isFileDrag(dragEvent) {
4563
var fileDrag = false;
4664
var dataTransfer = dragEvent.dataTransfer || dragEvent.originalEvent.dataTransfer;
@@ -53,4 +71,4 @@ angular.module('flow.dragEvents', ['flow.init'])
5371
}
5472
}
5573
};
56-
}]);
74+
}]);

0 commit comments

Comments
 (0)