ユーザーが地図上のマーカーをクリックしたとき、またはユーザーが場所のリストから場所をクリックしたときに、情報ウィンドウを開こうとしています。私が抱えている問題は、 $apply が既に進行中のエラーを受け取っていることです。アプリケーションは引き続き正常に動作しますが、ドキュメントによると、このエラーが表示される場合は何か問題があります。これが、私が扱っている 2 つのコードです。
この最初の関数は、マップ上にマーカーを配置し、クリック マーカー クリック イベントに応答します。
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;
});
};
ここでの 2 番目の関数は、アプリケーションの別の場所からのイベントを受け取り、Google マップのクリック イベントを、開きたいマーカーに送信するものです。
$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;
}
}
});
マーカーで Google マップのクリック イベントをトリガーすると、$apply already in progress エラーが発生します。
誰かが私が間違っているかもしれないことを知っていますか?