2016-12-12 5 views
3

Я пытаюсь получить все маркеры из базы данных с помощью этого кода. Но проблема в том, что когда я нажимаю маркер, я всегда получаю последний элемент из базы данных. Когда «alert (record.id)»; всплывает, он всегда показывает последний элемент для каждого маркера. Я хочу показать идентификатор каждого маркера, когда я нажимаю на них.IONIC 2 Google Maps Marker Click Event

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

ответ

5

Подписаться событие асинхронно. Вы не получите record.id из цикла for. Но вы можете получить доступ к данным 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