В моем приложении Angular существует явная утечка памяти, когда я использую следующую директиву листовки: https://github.com/tombatossals/angular-leaflet-directive.
Обратите внимание, что директива работает нормально, однако объем памяти продолжает расти, когда я ухожу и возвращаюсь к любому представлению, использующему директиву.
Директива основана на javascript-библиотеке листовок, которую можно найти здесь: https://github.com/Leaflet/Leaflet.
Я использую директиву следующим образом:
<div ng-controller="Explore">
<div leaflet defaults="defaults" center="center" markers="markers" layers="layers"></div>
</div>
Внутри моего контроллера я расширяю атрибуты директивы leaflet до области видимости:
angular.extend($scope, {
defaults: {
dragging: true,
doubleClickZoom: false,
scrollWheelZoom: false,
maxZoom: 12,
minZoom: 12
},
center: {
lat: $scope.cities[$scope.market.city][1],
lng: $scope.cities[$scope.market.city][0],
zoom: 12
},
markers: {},
layers: {
baselayers: {
google: {
name: 'Google Streets',
layerType: 'ROADMAP',
type: 'google'
}
}
}
});
Я не уверен, что вызывает утечку памяти, но я полагаю, что это может быть связано с прослушивателями событий, которые не удаляются, когда $destroy вызывается в директиве листовки:
scope.$on('$destroy', function () {
leafletData.unresolveMap(attrs.id);
});
При уничтожении вызывается функция unsolveMap:
this.unresolveMap = function (scopeId) {
var id = leafletHelpers.obtainEffectiveMapId(maps, scopeId);
maps[id] = undefined;
};
Это насколько я понял. Если кто-то сталкивался с чем-то подобным или имеет какие-либо идеи относительно того, как решить эту проблему дальше, я был бы очень признателен:)