@@ -83,6 +83,41 @@ angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, le
8383 isLayersControlVisible = updateLayersControl ( map , mapId , isLayersControlVisible , newBaseLayers , layers . overlays , leafletLayers ) ;
8484 return true ;
8585 }
86+ _updateBaseLayer ( newBaseLayers ) ;
87+ } ) ;
88+
89+ leafletScope . $watch ( function ( ) {
90+ var doRefresh = false ;
91+ angular . forEach ( layers . baselayers , function ( l ) {
92+ doRefresh = l . doRefresh || doRefresh ;
93+ } ) ;
94+ return doRefresh ;
95+ } , function ( doRefresh ) {
96+ if ( ! doRefresh ) return ;
97+ _updateOverlayLayers ( layers . baselayers ) ;
98+ } ) ;
99+
100+ // Watch for the overlay layers
101+ leafletScope . $watchCollection ( 'layers.overlays' , function ( newOverlayLayers , oldOverlayLayers ) {
102+ if ( angular . equals ( newOverlayLayers , oldOverlayLayers ) ) {
103+ isLayersControlVisible = updateLayersControl ( map , mapId , isLayersControlVisible , layers . baselayers , newOverlayLayers , leafletLayers ) ;
104+ return true ;
105+ }
106+ _updateOverlayLayers ( newOverlayLayers ) ;
107+ } ) ;
108+
109+ leafletScope . $watch ( function ( ) {
110+ var doRefresh = false ;
111+ angular . forEach ( layers . overlays , function ( l ) {
112+ doRefresh = l . doRefresh || doRefresh ;
113+ } ) ;
114+ return doRefresh ;
115+ } , function ( doRefresh ) {
116+ if ( ! doRefresh ) return ;
117+ _updateOverlayLayers ( layers . overlays ) ;
118+ } ) ;
119+
120+ function _updateBaseLayer ( newBaseLayers ) {
86121 // Delete layers from the array
87122 for ( var name in leafletLayers . baselayers ) {
88123 if ( ! isDefined ( newBaseLayers [ name ] ) || newBaseLayers [ name ] . doRefresh ) {
@@ -133,30 +168,19 @@ angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, le
133168
134169 // Only show the layers switch selector control if we have more than one baselayer + overlay
135170 isLayersControlVisible = updateLayersControl ( map , mapId , isLayersControlVisible , newBaseLayers , layers . overlays , leafletLayers ) ;
136- } ) ;
137-
138- // Watch for the overlay layers
139- leafletScope . $watchCollection ( 'layers.overlays' , function ( newOverlayLayers , oldOverlayLayers ) {
140- if ( angular . equals ( newOverlayLayers , oldOverlayLayers ) ) {
141- isLayersControlVisible = updateLayersControl ( map , mapId , isLayersControlVisible , layers . baselayers , newOverlayLayers , leafletLayers ) ;
142- return true ;
143- }
171+ }
144172
173+ function _updateOverlayLayers ( newOverlayLayers ) {
145174 // Delete layers from the array
146175 for ( var name in leafletLayers . overlays ) {
147176 if ( ! isDefined ( newOverlayLayers [ name ] ) || newOverlayLayers [ name ] . doRefresh ) {
148177 // Remove from the map if it's on it
149178 if ( map . hasLayer ( leafletLayers . overlays [ name ] ) ) {
150179 // Safe remove when ArcGIS layers is loading.
151- var options = isDefined ( newOverlayLayers [ name ] ) ?
152- newOverlayLayers [ name ] . layerOptions :null ;
180+ var options = isDefined ( newOverlayLayers [ name ] ) ? newOverlayLayers [ name ] . layerOptions : null ;
153181 safeRemoveLayer ( map , leafletLayers . overlays [ name ] , options ) ;
154182 }
155183 // TODO: Depending on the layer type we will have to delete what's included on it
156- var oldLayer = oldOverlayLayers [ name ] ;
157- if ( isDefined ( oldLayer ) && oldLayer . hasOwnProperty ( "cleanupAction" ) ) {
158- oldLayer . cleanupAction ( leafletLayers . overlays [ name ] ) ;
159- }
160184 delete leafletLayers . overlays [ name ] ;
161185
162186 if ( newOverlayLayers [ name ] && newOverlayLayers [ name ] . doRefresh ) {
@@ -219,7 +243,7 @@ angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, le
219243
220244 // Only add the layers switch selector control if we have more than one baselayer + overlay
221245 isLayersControlVisible = updateLayersControl ( map , mapId , isLayersControlVisible , layers . baselayers , newOverlayLayers , leafletLayers ) ;
222- } ) ;
246+ }
223247 } ) ;
224248 }
225249 } ;
0 commit comments