AngularJS,Google Maps和InfoWindows

时间:2013-01-23 22:52:41

标签: javascript google-maps-api-3 angularjs google-maps-markers

当用户点击地图上的标记或用户点击位置列表中的某个位置时,我正在尝试打开信息窗口。我遇到的问题是我收到的$ 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;
            });
};

此处的第二个功能是接受来自应用程序中其他位置的事件,并将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已在进行中错误。

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

1 个答案:

答案 0 :(得分:0)

我知道可能有更好的方法可以做到这一点,但我最终将underscore.js添加到我的项目中,并使用下划线来编译模板,同时传入数据。

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

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