android谷歌地图删除marker,无法将marker从google地图上删除

这篇博客探讨了一个在使用Google Maps API时遇到的问题,即无法从地图上删除Marker。作者通过代码分析发现,问题出在 Marker 的事件监听器上。原来,`addListener` 方法返回的是一个事件监听器对象,而不是Marker实例,导致`marker.setMap(null)`无法执行。通过拆解链式代码并确保直接操作Marker实例,问题得到解决。博客强调了仔细检查和理解API用法的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 问题描述: 为什么无法将marker从map上删除

2 删除代码

clearMarkers() {

this.markers.forEach(marker => {

marker.setMap(null);

});

this.markers = [];

}

3 错误信息

Uncaught TypeError: marker.setMap is not a function

4 尝试的方案

已经给出提示了,问题发生在类型错误,既然marker是google.maps.Marker的实例,

那就检查当前的marker到底是不是和预期相符合。

clearMarkers() {

this.markers.forEach(marker => {

if (marker instanceof google.maps.Marker) {

marker.setMap(null);

}

});

this.markers = [];

}

果然不报错了,那就说明marker并不是google.maps.Marker的实例。此时就要去源头看看

marker的实例化过程。

let marker = new google.maps.Marker({

map: self.map,

position: position,

draggable: true,

animation: google.maps.Animation.DROP,

}).addListener("click", function () {

if (self.getAnimation() !== null) {

self.setAnimation(null);

} else {

self.setAnimation(google.maps.Animation.BOUNCE);

}

});

第一眼,我还没有看出来,感觉没有问题。但是潜意识中意识到,可以将这段链式代码拆解。

let marker = new google.maps.Marker({

map: self.map,

position: position,

draggable: true,

animation: google.maps.Animation.DROP,

});

marker.addListener("click", function () {

if (marker.getAnimation() !== null) {

marker.setAnimation(null);

} else {

marker.setAnimation(google.maps.Animation.BOUNCE);

}

});

代码正常运行。因此问题就出现在这里。

new google.maps.Marker({

map: self.map,

position: position,

draggable: true,

animation: google.maps.Animation.DROP,

}).addListener("click", function () {

if (self.getAnimation() !== null) {

self.setAnimation(null);

} else {

self.setAnimation(google.maps.Animation.BOUNCE);

}

});

返回的不是marker,而是一个事件监听器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值