From 51ead6817ded29fade1815b59c7a869ff66a4fd2 Mon Sep 17 00:00:00 2001 From: Ari-Pekka Koponen Date: Mon, 15 Aug 2016 11:13:11 +0300 Subject: [PATCH] Fix memory leak in leafletControlHelpers Fixes issue #279. --- src/directives/controls.js | 4 ++++ src/directives/layers.js | 4 ++++ src/services/leafletControlHelpers.js | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/src/directives/controls.js b/src/directives/controls.js index cca2c121..18ae47cc 100644 --- a/src/directives/controls.js +++ b/src/directives/controls.js @@ -19,6 +19,10 @@ angular.module('ui-leaflet').directive('controls', function (leafletLogger, leaf var leafletControls = {}; var errorHeader = leafletHelpers.errorHeader + ' [Controls] '; + scope.$on('$destroy', function () { + leafletControlHelpers.destroyMapLayersControl(scope.mapId); + }); + controller.getMap().then(function(map) { leafletScope.$watchCollection('controls', function(newControls) { diff --git a/src/directives/layers.js b/src/directives/layers.js index cff9b0ee..6ca459b2 100644 --- a/src/directives/layers.js +++ b/src/directives/layers.js @@ -23,6 +23,10 @@ angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, le updateLayersControl = leafletControlHelpers.updateLayersControl, isLayersControlVisible = false; + scope.$on('$destroy', function () { + leafletControlHelpers.destroyMapLayersControl(scope.mapId); + }); + controller.getMap().then(function(map) { // We have baselayers to add to the map diff --git a/src/services/leafletControlHelpers.js b/src/services/leafletControlHelpers.js index 42e6acc8..44a891ed 100644 --- a/src/services/leafletControlHelpers.js +++ b/src/services/leafletControlHelpers.js @@ -194,6 +194,10 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootSco map.addControl(_layersControl); } return mustBeLoaded; + }, + + destroyMapLayersControl: function(mapId) { + delete _controls[mapId]; } }; });