0

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

这里的第二个函数是接受来自应用程序中其他地方的事件并将谷歌地图点击事件发送到我想打开的标记。

$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;
                }
            }
        });

当我在标记上触发谷歌地图点击事件时,会发生 $apply 已在进行中的错误。

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

4

1 回答 1

0

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

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

var infoWindow = new google.maps.InfoWindow({
    content : compiled
});
于 2013-01-29T16:44:48.907 回答