我正试图用这段代码从数据库中获取所有标记。但问题是,当我点击标记时,我总是从数据库中获取最后一项。当“警报(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);
});
});
}
订阅事件是异步的。您不会从for循环中获取record.id.但您可以在订阅中访问markerOptions数据。
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);
});
});
对于那些仍然有这个问题的人
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);
});
});