IONIC 2 Google Maps Marker点击活动

问题描述 投票:3回答:2

我正试图用这段代码从数据库中获取所有标记。但问题是,当我点击标记时,我总是从数据库中获取最后一项。当“警报(record.id);”弹出它总是显示每个标记的最后一项。我想在点击它们时显示每个标记的ID。

loadMarker(){
this.service.getMaps()
      .subscribe( data1 => {
        let loc = data1;
             for (var i = 0; i < data1.length; i++) {
                 var record = data1[i];
        let latlng = new GoogleMapsLatLng(record.lat, record.lng);
        let markerOptions: GoogleMapsMarkerOptions = {
        'position': latlng,
        'title': record.title,
        'animation': GoogleMapsAnimation.DROP
        };


        this.map.addMarker(markerOptions).then((marker: GoogleMapsMarker) => {
         marker.addEventListener(GoogleMapsEvent.MARKER_CLICK)
        .subscribe(() => {
          alert(record.id);
               });
          });       
}
cordova google-maps ionic-framework ionic2
2个回答
5
投票

订阅事件是异步的。您不会从for循环中获取record.id.但您可以在订阅中访问markerOptions数据。

Check here

    this.map.addMarker(markerOptions).then((marker: GoogleMapsMarker) => {
             marker.addEventListener(GoogleMapsEvent.MARKER_CLICK)
            .subscribe(e => {
              alert(e.get('title'));
let rec = data1.filter(v=>v.title==e.get('title'));
alert(rec[0].id);
                   });
              });

And here


0
投票

对于那些仍然有这个问题的人

this.map
  .addMarker({
    title: title,
    index: index,
    icon: {
      size: {
        height: 48,
        width: 30

      },
      url: pinUri
    },
    position: {
      lat: latitude,
      lng: longuitud
    }
  })
  .then(marker => {

    marker
      .on(GoogleMapsEvent.MARKER_CLICK)
      .subscribe((selectedMarker: any) => {
        const mark = selectedMarker[1];
        this.showModal(mark.get('index'), true);
      });

  });
© www.soinside.com 2019 - 2024. All rights reserved.