【问题标题】:open a info window with event click on google maps with angular打开带有事件的信息窗口点击带有角度的谷歌地图
【发布时间】:2016-03-15 08:34:54
【问题描述】:

我有一个应用程序,我需要它在谷歌地图上打开一个信息窗口,当我点击侧边栏中的面板时只显示 1 秒钟。在此之后,它不再需要工作了。

我在边栏中有一个标记和信息列表,当用户单击其中一些标记时,我需要打开信息窗口。

(function(){
    angular.module('mapCtrl', ['presentacionService'])
        .controller('MapController', function($scope, Presentacion) {
            var self = this;
            function initialize() {
                var options = {
                    googleApiKey: '',
                    locationColumn: 'geometry',
                    map_center: [-16.494898, -68.133553],
                    locationScope: 'La Paz'
                };
                options = options || {};
                self.googleApiKey = options.googleApiKey || "";
                self.locationColumn = options.locationColumn || "geometry";
                self.locationScope = options.locationScope || "";
                self.defaultZoom = options.defaultZoom || 10;
                self.map_centroid = new google.maps.LatLng(options.map_center[0], options.map_center[1]);

                self.myOptions = {
                    zoom: self.defaultZoom,
                    center: self.map_centroid,
                    mapTypeId: google.maps.MapTypeId.ROADMAP
                };

                self.map = new google.maps.Map($("#map")[0], self.myOptions);

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

                google.maps.event.addListener(map, 'click', function() {
                    infowindow.close();
                });

                $scope.markers = [];
                var createMarker = function (info){
                    var marker = new google.maps.Marker({
                        map: self.map,
                        position: new google.maps.LatLng(info.latitud, info.long),
                        title: info.nombre,
                        date: info.date,
                        imagen: info.imagen,
                        nombre_categoria: info.nombre_categoria
                    });
                    marker.content = '<div class="infoWindowContent">' + info.descripcion + '</div>';
                    google.maps.event.addListener(marker, 'click', function(){
                        infoWindow.setContent('<h2>' + marker.title + '</h2>' + marker.content);
                        infoWindow.open(self.map, marker);
                    });
                    $scope.markers.push(marker);
                };
                Presentacion.getAll().success(function (datos) {
                    for (var i = 0; i < datos.length; i++){
                        createMarker(datos[i]);
                    }
                });
                $scope.openInfoWindow = function(e, selectedMarker){
                    console.log('show something');
                    e.preventDefault();
                    new google.maps.event.trigger(selectedMarker, 'click' );
                };
            }
            google.maps.event.addDomListener(window, 'load', initialize);

        });
})();

视图中的一个:

 <div class="row list_special" ng-repeat="marker in markers | orderBy : 'date'">
                        <div class="panel-google-plus" ng-click="openInfoWindow($event, marker)">
                   </div>
</div>

【问题讨论】:

  • 不要在你的 openInfoWindow 函数中使用new google.maps.event.trigger。您不是在构造触发器对象,而是在 google.maps.event 类上调用触发器函数。就做google.maps.event.trigger
  • 我尝试使用 google.maps.event.trigger 并遇到同样的错误

标签: angularjs google-maps google-maps-api-3 infowindow


【解决方案1】:

我准备了一个 Plunker 来模拟您的项目所需的功能。 这是网址:http://plnkr.co/edit/gIhNLQgfiiD4QfuQQOi4?p=preview

我已将您的服务 Presentacion 替换为在 MainCtrl 中初始化的简单数组 places(而且 markers 是 MainCtrl 范围的属性,但由 MapController 继承):

$scope.markers = [];
$scope.places = [];
$scope.places.push({lat: 44.99758207, lng: 7.140598296999997, ...);

您的代码中没有其他编辑,它按要求工作:您可以单击一个项目,它会在您想要的所有时间打开信息窗口。

【讨论】:

  • 但是你做了同样的 XD,这对我来说是不同的,因为打开了一个信息窗口,但是在这之后的一秒钟内不要打开更多的信息窗口
  • 抱歉,我不明白...我的代码有什么问题吗?如果是关于填充标记的代码,这只是一个示例,因为您没有共享“Presentacion”服务...
猜你喜欢
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 2017-05-04
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
相关资源
最近更新 更多