Skip to content

Commit eaf1f21

Browse files
committed
turns out Google Maps can have more than one listener on an event, so keep track of all of them instead of removing earlier listeners
1 parent 5774909 commit eaf1f21

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

src/controllers/angulargmMapController.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,9 @@
168168

169169
this._destroy = function() {
170170
angular.forEach(this._listeners, function(listener) {
171-
google.maps.event.removeListener(listener);
171+
angular.forEach(listener, function(l) {
172+
google.maps.event.removeListener(l);
173+
});
172174
});
173175
this._listeners = {};
174176

@@ -191,10 +193,11 @@
191193
this.addMapListener = function(event, handler) {
192194
var listener = google.maps.event.addListener(this._map, event, handler);
193195

194-
if (this._listeners[event] !== undefined) {
195-
google.maps.event.removeListener(this._listeners[event])
196+
if (this._listeners[event] === undefined) {
197+
this._listeners[event] = [];
196198
}
197-
this._listeners[event] = listener;
199+
200+
this._listeners[event].push(listener);
198201
};
199202

200203

test/unit/controllers/angulargmMapController.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ describe('angulargmMapController', function() {
121121
mapCtrl.addMapListenerOnce('center_changed', function() {
122122
callCount++;
123123
});
124+
// Does not get added to the listeners hash
125+
expect(mapCtrl._listeners.center_changed).not.toBeDefined();
126+
124127
google.maps.event.trigger(mapCntr.getMap(scope.gmMapId()), 'center_changed');
125128
google.maps.event.trigger(mapCntr.getMap(scope.gmMapId()), 'center_changed');
126129

@@ -138,20 +141,17 @@ describe('angulargmMapController', function() {
138141
expect(listeners.center_changed).not.toBeUndefined();
139142
});
140143

141-
it('removes listeners if they are overwritten', function() {
142-
spyOn(google.maps.event, 'removeListener').andCallThrough();
143-
144+
it('keeps multiple listeners on an event', function() {
144145
var aFunc = function() {};
145146
var anotherFunc = function() {};
146147

147148
mapCtrl.addMapListener('click', aFunc);
148149
var listener = mapCtrl._listeners.click;
149-
150150
mapCtrl.addMapListener('click', anotherFunc);
151-
expect(google.maps.event.removeListener).toHaveBeenCalledWith(listener);
152-
expect(mapCtrl._listeners.click).toBeDefined();
153-
});
154151

152+
expect(angular.isArray(mapCtrl._listeners.click)).toBeTruthy();
153+
expect(mapCtrl._listeners.click.length).toEqual(2);
154+
});
155155

156156
it('adds generic listeners', function() {
157157
var called = false;

0 commit comments

Comments
 (0)