Javascript AngularJS、谷歌地图和信息窗口

Javascript AngularJS、谷歌地图和信息窗口,javascript,google-maps-api-3,angularjs,google-maps-markers,Javascript,Google Maps Api 3,Angularjs,Google Maps Markers,我试图在用户单击地图上的标记或用户单击位置列表中的位置时打开一个信息窗口。我遇到的问题是,我收到一个$apply已在进行中错误。应用程序仍然可以正常工作,但是根据文档,如果我看到这个错误,我就做错了。下面是我正在处理的两位代码 第一个函数将标记放置在地图上,并响应单击标记单击事件 var placeMarker = function(center) { var marker = new google.maps.Marker({ map :

我试图在用户单击地图上的标记或用户单击位置列表中的位置时打开一个信息窗口。我遇到的问题是,我收到一个$apply已在进行中错误。应用程序仍然可以正常工作,但是根据文档,如果我看到这个错误,我就做错了。下面是我正在处理的两位代码

第一个函数将标记放置在地图上,并响应单击标记单击事件

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;
            });
};
var placeMarker=函数(中间){
var marker=new google.maps.marker({
地图:地图,
位置:新的google.maps.LatLng(center.location.latitude,center.location.longitude)
});
var infoWindow=new google.maps.infoWindow();
marker.center=中心;
$scope.markers.push(marker);
google.maps.event.addListener(标记“单击”,函数(){
if($scope.openInfoWindow){
$scope.openInfoWindow.close();
}
$scope.center=marker.center;
if(!$scope.compiled){
var内容=“”;
$scope.compiled=$compile(content)($scope);
}
$scope.$apply();
infoWindow.setContent($scope.compiled[0].innerHTML);
信息窗口。打开(地图、标记);
$scope.openInfoWindow=infoWindow;
});
};
这里的第二个函数是接收应用程序中其他地方的事件,并向我要打开的标记发送google maps click事件

$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;
                }
            }
        });
$scope.$on(“应用程序:ResultListSelection”,函数(事件,providerNumber){
对于(变量i=0,长度=$scope.markers.length;i
在标记上触发google maps单击事件时,会发生$apply ready in progress错误


有人知道我可能做错了什么吗?

我知道可能有更好的方法,但我最终在项目中添加了下划线.js,并在传递数据时使用下划线编译模板

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

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

如何调用函数placeMarker?如果您注释掉您的
$scope.$apply()
行,错误是否会消失,您的应用程序是否仍然有效?当您调用$apply()“inside”Angular时,就会发生此错误。换句话说,Angular已经在一个——请参见“运行时”一节中的图片。因此Angular已经在$apply中了。当我从$rootScope接收到一个事件,该事件传递了我在地图上放置标记所需的所有信息时,就会调用placeMarker。如果我在$scope.$apply()之外进行注释,我不会收到错误,但我的信息窗口不会显示。我将在“运行时”中查看图片,看看这是否为我清除了问题。