【问题标题】:Custom google maps infowindow using ionic 2使用 ionic 2 自定义谷歌地图信息窗口
【发布时间】:2017-08-25 00:45:05
【问题描述】:

我是 ionic 2 的新手,我正在尝试创建一个自定义信息窗口,因此当用户单击标记时,他们可以看到一些基本信息,例如图片和位置名称,但他们也可以单击infoWindow 中的链接,用于打开包含该位置详细信息的模式。这是我想将它添加到我的标记的方式。

addMarker(lat: number, lng: number, place: any): void {
    let latLng = new google.maps.LatLng(lat, lng);

    let marker = new google.maps.Marker({
        map: this.map,
        animation: google.maps.Animation.DROP,
        position: latLng,
        title: place.name
    });

    let infoWindow = new google.maps.InfoWindow({
       content: `<>custom template here with some basic details</>`
    });

    marker.addListener('click', ()=> {
       infoWindow.open(this.map, marker);

    });

    this.markers.push(marker);
} 

【问题讨论】:

    标签: javascript google-maps ionic-framework ionic2


    【解决方案1】:

    如果您不想使用任何外部库,那么您可以查看下面的示例。当infowindow 准备好时,您需要添加addEventListener。因为当infowindow 准备好时,您可以通过document.getElementById('id') 找到组件。

    let infoWindow = new google.maps.InfoWindow({
        content :  `<p id = "myid">Click</p>`
    });
    google.maps.event.addListenerOnce(infoWindow, 'domready', () => {
        document.getElementById('myid').addEventListener('click', () => {
                alert('Clicked');
            });
    });
    

    【讨论】:

    • 我喜欢这个解决方案,但是当我将它添加到带有多个标记的循环中时,链接会打开我的标记的所有位置。因此,我尝试为myid 中的每个标记添加一个附加项,例如'myid'+marker.id。这导致document.getElementById('myid'+marker.id)null,因为在通过单击打开 infoWindow 之前,id 没有附加到 infoWindow。有人可以指点解决这个问题吗?
    • 能否分享您的代码(标记和信息窗口构建代码)?
    • 这个问题一直困扰着我一段时间,我只是一直在躲避这个问题并在应用程序的其他部分工作。这就像一个魅力。
    • 优秀。我在找这个钩子。
    【解决方案2】:

    您可以为链接元素添加唯一 ID。我使用的是 lat 和 lng,因为每个标记的位置都是唯一的。

    let infoWindow = new google.maps.InfoWindow({
        content :  `<p id = "myid` + lat + lng + `">Click</p>`
    });
    

    然后,

    google.maps.event.addListenerOnce(infoWindow, 'domready', () => {
        document.getElementById('myid' + lat + lng).addEventListener('click', () => {
                alert('Clicked');
            });
    });
    

    【讨论】:

      【解决方案3】:

      您在控制台中看到任何错误吗?可能是您在初始化之前尝试访问 google.maps。首先,您需要通过将回调传递给脚本 url 来确保在调用任何它之前已加载谷歌地图库。请参阅https://developers.google.com/maps/documentation/javascript/adding-a-google-map 以供参考。最好使用像 https://github.com/SebastianM/angular2-google-maps 这样的任何库来处理 ionic 框架中的地图。

      【讨论】:

      • 感谢您的回复,我可以看到弹出窗口,但我想自定义inforwindow,也许添加一个离子卡。这是我能做的吗?目前我在内容中有一个 div 标签,里面有一个段落标签和信息。
      • 您应该使用 marker.addListener 打开一个离子模式而不是使用 google.maps.infoWindow 来显示详细信息。
      • 我曾想过这样做,但想法是先显示一些详细信息,然后如果用户想去那个位置或了解更多信息,他们就会点击信息窗口。我以前在一些应用程序中看到过这样做。我只是不知道如何使用离子实现它
      • 非常感谢,这就是我要找的。我会通过它并实施它!
      猜你喜欢
      • 2017-08-19
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2014-08-28
      • 2019-06-03
      相关资源
      最近更新 更多