Skip to content

Commit d8dd9ba

Browse files
committed
Fix directions re-render issue
1 parent aef5b59 commit d8dd9ba

File tree

1 file changed

+29
-6
lines changed

1 file changed

+29
-6
lines changed

directives/directions.js

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@
3030
'use strict';
3131
var NgMap, $timeout, NavigatorGeolocation;
3232

33+
var requestTimeout, routeRequest;
34+
// Delay for each route render to accumulate all requests into a single one
35+
// This is required for simultaneous origin\waypoints\destination change
36+
// 20ms should be enough to merge all request data
37+
var routeRenderDelay = 20;
38+
3339
var getDirectionsRenderer = function(options, events) {
3440
if (options.panel) {
3541
options.panel = document.getElementById(options.panel) ||
@@ -65,13 +71,30 @@
6571
}
6672

6773
var showDirections = function(request) {
68-
directionsService.route(request, function(response, status) {
69-
if (status == google.maps.DirectionsStatus.OK) {
70-
$timeout(function() {
71-
renderer.setDirections(response);
72-
});
74+
if (requestTimeout) {
75+
for (var attr in request)
76+
{
77+
if (request.hasOwnProperty(attr))
78+
{
79+
routeRequest[attr] = request[attr];
80+
}
7381
}
74-
});
82+
}
83+
else
84+
{
85+
requestTimeout = $timeout(function() {
86+
if (!routeRequest)
87+
{
88+
routeRequest = request;
89+
}
90+
directionsService.route(routeRequest, function(response, status) {
91+
if (status == google.maps.DirectionsStatus.OK) {
92+
renderer.setDirections(response);
93+
}
94+
});
95+
requestTimeout = undefined;
96+
}, routeRenderDelay);
97+
}
7598
};
7699

77100
if (request.origin && request.destination) {

0 commit comments

Comments
 (0)