/ / AngularJS, Google Maps i InfoWindows - javascript, google-maps-api-3, angularjs, google-maps-markers

AngularJS, Google Maps i InfoWindows - javascript, google-maps-api-3, angularjs, google-maps-markers

Próbuję otworzyć okno informacyjne, gdy użytkownikklika znacznik na mapie lub gdy użytkownik klika lokalizację z listy lokalizacji. Problem, który mam, polega na tym, że otrzymuję zgłoszenie dotyczące $ już w toku. Aplikacja nadal działa dobrze, ale zgodnie z dokumentacją, jeśli widzę ten błąd, robię coś złego. Oto dwa fragmenty kodu, z którymi mam do czynienia.

Ta pierwsza funkcja umieszcza znaczniki na mapie i odpowiada na zdarzenia kliknięcia znacznika kliknięcia.

var placeMarker = function(center) {
var marker = new google.maps.Marker({
map : map,
position : new google.maps.LatLng(center.location.latitude, center.location.longitude)
});

var infoWindow = new google.maps.InfoWindow();

marker.center = center;
$scope.markers.push(marker);

google.maps.event.addListener(marker, "click", function() {
if ($scope.openInfoWindow) {
$scope.openInfoWindow.close();
}

$scope.center = marker.center;

if (!$scope.compiled) {
var content = "<div id="infowindow_content" ng-include src=""/infowindow.html""></div>";
$scope.compiled = $compile(content)($scope);
}

$scope.$apply();

infoWindow.setContent($scope.compiled[0].innerHTML);
infoWindow.open(map, marker);

$scope.openInfoWindow = infoWindow;
});
};

Drugą funkcją jest to, co akceptuje zdarzenie z innego miejsca w aplikacji i wysyła zdarzenie kliknięcia mapy google do znacznika, który chciałbym otworzyć.

$scope.$on("app:ResultListSelection", function(event, providerNumber) {
for (var i = 0, length = $scope.markers.length; i < length; i += 1) {
var center = $scope.markers[i].center;

if (providerNumber === center.providerNo) {
google.maps.event.trigger($scope.markers[i], "click");
break;
}
}
});

Błąd "Zastosuj już w toku" występuje, gdy wyzwolę zdarzenie kliknięcia mapy Google na znaczniku.

Czy ktoś ma pojęcie, co robię źle?

Odpowiedzi:

0 dla odpowiedzi № 1

Wiem, że prawdopodobnie jest lepszy sposób na zrobienie tego, ale ostatecznie dodałem do pliku underscore.js i użyłem podkreślenia, aby skompilować szablon podczas przekazywania danych.

var template = _.template($("#infoWindowTmpl").html()),
compiled = template($scope);

var infoWindow = new google.maps.InfoWindow({
content : compiled
});