Skip to content
This repository was archived by the owner on Nov 7, 2023. It is now read-only.

Commit 1a009a0

Browse files
committed
issue 805 resolved
1 parent 955042c commit 1a009a0

File tree

9 files changed

+196
-29
lines changed

9 files changed

+196
-29
lines changed

dist/angular-leaflet-directive.js

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ angular.module("leaflet-directive", []).directive('leaflet',
4646
genDispatchMapEvent = leafletEvents.genDispatchMapEvent,
4747
mapEvents = leafletEvents.getAvailableMapEvents();
4848

49+
scope.mapId = attrs.id;
4950
leafletData.setDirectiveControls({}, attrs.id);
5051

5152
// Set width and height utility functions
@@ -2422,7 +2423,7 @@ angular.module("leaflet-directive").service('leafletMarkersHelpers', ["$rootScop
24222423
addMarkerWatcher: function (marker, name, leafletScope, layers, map, isDeepWatch) {
24232424
var markerWatchPath = Helpers.getObjectArrayPath("markers." + name);
24242425
isDeepWatch = defaultTo(isDeepWatch, true);
2425-
//TODO:break up this 200 line function to be readable (nmccready)
2426+
24262427
var clearWatch = leafletScope.$watch(markerWatchPath, function(markerData, oldMarkerData) {
24272428
if (!isDefined(markerData)) {
24282429
_deleteMarker(marker, map, layers);
@@ -3910,6 +3911,27 @@ angular.module("leaflet-directive").directive('markers',
39103911
maybeWatch = leafletWatchHelpers.maybeWatch,
39113912
extendDirectiveControls = leafletDirectiveControlsHelpers.extend;
39123913

3914+
var _getLMarker = function(leafletMarkers, name, maybeLayerName){
3915+
if(!Object.keys(leafletMarkers).length) return;
3916+
if(maybeLayerName && isString(maybeLayerName)){
3917+
if(!leafletMarkers[maybeLayerName] || !Object.keys(leafletMarkers[maybeLayerName]).length)
3918+
return;
3919+
return leafletMarkers[maybeLayerName][name];
3920+
}
3921+
return leafletMarkers[name];
3922+
};
3923+
3924+
var _setLMarker = function(lObject, leafletMarkers, name, maybeLayerName){
3925+
if(maybeLayerName && isString(maybeLayerName)){
3926+
if(!isDefined(leafletMarkers[maybeLayerName]))
3927+
leafletMarkers[maybeLayerName] = {};
3928+
leafletMarkers[maybeLayerName][name] = lObject;
3929+
}
3930+
else
3931+
leafletMarkers[name] = lObject;
3932+
return lObject;
3933+
};
3934+
39133935
var _maybeAddMarkerToLayer = function(layerName, layers, model, marker, doIndividualWatch, map){
39143936

39153937
if (!isString(layerName)) {
@@ -3956,7 +3978,8 @@ angular.module("leaflet-directive").directive('markers',
39563978

39573979
var model = Helpers.copy(markersToRender[newName]);
39583980
var pathToMarker = Helpers.getObjectDotPath(maybeLayerName? [maybeLayerName, newName]: [newName]);
3959-
if (!isDefined(leafletMarkers[newName])) {
3981+
var maybeLMarker = _getLMarker(leafletMarkers,newName, maybeLayerName);
3982+
if (!isDefined(maybeLMarker)) {
39603983
//(nmccready) very important to not have model changes when lObject is changed
39613984
//this might be desirable in some cases but it causes two-way binding to lObject which is not ideal
39623985
//if it is left as the reference then all changes from oldModel vs newModel are ignored
@@ -3967,7 +3990,7 @@ angular.module("leaflet-directive").directive('markers',
39673990
$log.error(errorHeader + ' Received invalid data on the marker ' + newName + '.');
39683991
continue;
39693992
}
3970-
leafletMarkers[newName] = marker;
3993+
_setLMarker(marker, leafletMarkers, newName, maybeLayerName);
39713994

39723995
// Bind message
39733996
if (isDefined(model.message)) {
@@ -4009,7 +4032,7 @@ angular.module("leaflet-directive").directive('markers',
40094032
leafletMarkerEvents.bindEvents(marker, pathToMarker, model, leafletScope, layerName);
40104033
}
40114034
else {
4012-
updateMarker(model, oldModels[newName], leafletMarkers[newName], pathToMarker, leafletScope, layers, map);
4035+
updateMarker(model, oldModels[newName], maybeLMarker, pathToMarker, leafletScope, layers, map);
40134036
}
40144037
}
40154038
};
@@ -4097,19 +4120,27 @@ angular.module("leaflet-directive").directive('markers',
40974120

40984121
getLayers().then(function(layers) {
40994122
var _clean = function(models, oldModels){
4123+
if(isNested) {
4124+
$it.each(models, function(markerToMaybeDel, layerName) {
4125+
_destroy(markerToMaybeDel, oldModels[layerName], leafletMarkers[layerName], map, layers);
4126+
});
4127+
return;
4128+
}
41004129
_destroy(models, oldModels, leafletMarkers, map, layers);
41014130
};
41024131

41034132
var _create = function(models, oldModels){
41044133
_clean(models, oldModels);
4105-
var skips = _getNewModelsToSkipp(models, oldModels, leafletMarkers);
4134+
var skips = null;
41064135
if(isNested) {
41074136
$it.each(models, function(markersToAdd, layerName) {
4137+
skips = _getNewModelsToSkipp(models[layerName], oldModels[layerName], leafletMarkers[layerName]);
41084138
_addMarkers(markersToAdd, oldModels, map, layers, leafletMarkers, leafletScope,
41094139
watchOptions, layerName, skips);
41104140
});
41114141
return;
41124142
}
4143+
skips = _getNewModelsToSkipp(models, oldModels, leafletMarkers);
41134144
_addMarkers(models, oldModels, map, layers, leafletMarkers, leafletScope,
41144145
watchOptions, undefined, skips);
41154146
};
@@ -4722,12 +4753,15 @@ angular.module("leaflet-directive")
47224753
];
47234754
};
47244755

4725-
var _genDispatchMapEvent = function(scope, eventName, logic) {
4756+
var _genDispatchMapEvent = function(scope, eventName, logic, mapId) {
4757+
// (nmccready) We should consider passing mapId as an argument or using it from scope
47264758
return function(e) {
47274759
// Put together broadcast name
4760+
// (nmccready) We should consider passing mapId joining mapId to the broadcastName to keep the event unique. Same should be done for all directives so we know what map it comes from.
4761+
// problem with this is it will cause a minor bump and break backwards compat
47284762
var broadcastName = 'leafletDirectiveMap.' + eventName;
47294763
// Safely broadcast the event
4730-
fire(scope, broadcastName, logic, e, e.target, scope)
4764+
fire(scope, broadcastName, logic, e, e.target, scope, mapId)
47314765
};
47324766
};
47334767

dist/angular-leaflet-directive.min.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/angular-leaflet-directive_dev_mapped.js

Lines changed: 41 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/angular-leaflet-directive_dev_mapped.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/805-markers-updates.html

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,19 @@
1010
<link rel="stylesheet" href="../bower_components/leaflet/dist/leaflet.css" />
1111
<link rel="stylesheet" href="../bower_components/leaflet.markercluster/dist/MarkerCluster.Default.css" />
1212
<meta name="viewport" content="width=device-width, initial-scale=1.0">
13+
<style>
14+
div{
15+
margin:10px;
16+
}
17+
</style>
1318
<script>
1419
angular.module('demoApp', ['leaflet-directive'])
15-
.controller('Ctrl', ['$scope', 'leafletData', function($scope, leafletData) {
20+
.controller('Ctrl', ['$scope', 'leafletData', '$timeout', function($scope, leafletData, $timeout) {
1621
angular.extend($scope, {
1722
center: {
1823
lat: 48.879633,
1924
lng: 2.331717,
20-
zoom: 15
25+
zoom: 14
2126
},
2227
layers: {
2328
baselayers: {
@@ -57,7 +62,18 @@
5762
}
5863
});
5964

65+
$timeout(function(){
66+
//move a point to see if it moves on the map
67+
$scope.markers.points[1] = {
68+
layer: "points",
69+
lat: 48.889318,
70+
lng: 2.33151,
71+
message: "MALL 2"
72+
};
73+
},2000);
74+
6075
$scope.$on("leafletDirectiveMap.click", function(event, args) {
76+
if(args.model.mapId != 'map1') return;
6177
var leafEvent = args.leafletEvent;
6278
// console.log("before", $scope.markers.mapdescription, $scope.markers.points);
6379
$scope.markers.mapdescription.push({
@@ -78,12 +94,61 @@
7894
});
7995

8096

97+
}])
98+
.controller('Ctrl2', ['$scope', 'leafletData', function($scope, leafletData) {
99+
angular.extend($scope, {
100+
center: {
101+
lat: 48.879633,
102+
lng: 2.331717,
103+
zoom: 15
104+
},
105+
layers: {
106+
baselayers: {
107+
osm: {
108+
name: 'OpenStreetMap',
109+
url: 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
110+
type: 'xyz'
111+
}
112+
}
113+
},
114+
defaultIcon: {},
115+
markers: [{
116+
"lat": 48.879633,
117+
"lng": 2.331717,
118+
"message": "MALL 1"
119+
}, {
120+
"lat": 48.879318,
121+
"lng": 2.33151,
122+
"message": "MALL 2"
123+
}]
124+
});
125+
126+
$scope.$on("leafletDirectiveMap.click", function(event, args) {
127+
if(args.model.mapId != 'map2') return;
128+
var leafEvent = args.leafletEvent;
129+
130+
$scope.markers.push({
131+
lat: leafEvent.latlng.lat,
132+
lng: leafEvent.latlng.lng,
133+
draggable: true,
134+
icon: ''
135+
});
136+
137+
});
138+
139+
81140
}]);
82141
</script>
83142
</head>
84143

85-
<body ng-controller="Ctrl">
86-
<leaflet width="100%" height="480px" center="center" markers="markers" markers-nested="true" layers="layers"></leaflet>
144+
<body >
145+
<div ng-controller="Ctrl">
146+
<leaflet id="map1" width="100%" height="480px" center="center" markers="markers" markers-nested="true" layers="layers"></leaflet>
147+
</div>
148+
<div ng-controller="Ctrl2">
149+
<leaflet id="map2" width="100%" height="480px" center="center" markers="markers" layers="layers"></leaflet>
150+
</div>
151+
87152
</body>
88153

89154
</html>

src/directives/leaflet.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ angular.module("leaflet-directive", []).directive('leaflet',
3939
genDispatchMapEvent = leafletEvents.genDispatchMapEvent,
4040
mapEvents = leafletEvents.getAvailableMapEvents();
4141

42+
scope.mapId = attrs.id;
4243
leafletData.setDirectiveControls({}, attrs.id);
4344

4445
// Set width and height utility functions

0 commit comments

Comments
 (0)