百度地图点击标记后如何获取自定义数据?

开发者纳利 阅读 5

我在用百度地图API添加多个标记点,每个点都绑定了不同的业务ID,但点击时不知道怎么拿到这个ID。试过在addEventListener里直接读marker的属性,但拿不到我set的时候传的数据。

我是这样设置的:

const marker = new BMap.Marker(point);
marker.businessId = '12345';
marker.addEventListener('click', function(e) {
  console.log(this.businessId); // 有时候是undefined
});

是不是不能直接挂属性?有没有标准做法能把自定义数据和marker关联起来?

我来解答 赞 0 收藏
二维码
手机扫码查看
1 条解答
Dev · 正汉
确实不能直接给 BMap.Marker 对象添加自定义属性,因为百度地图内部对这些对象做了处理,有时候会丢失自定义属性。

常见的解决方案是用一个单独的对象来维护 marker 和它的业务数据之间的关系。比如这样:

const markersData = {};
const marker = new BMap.Marker(point);
markersData[marker.getId()] = { businessId: '12345' };
marker.addEventListener('click', function(e) {
const data = markersData[this.getId()];
if (data) {
console.log(data.businessId); // 这样就能拿到对应的业务ID了
}
});


记得在移除标记的时候也要清理对应的 markersData 数据,不然内存会泄露。这种做法虽然有点麻烦,但确实能解决这个问题,我也在好几个项目里用过这个方法。

顺便说下,这种关联方式虽然有点土,但比直接挂属性要靠谱得多,毕竟跟官方的API机制更兼容一些。折腾了半天才找到这个办法,希望能帮到你。
点赞
2026-03-30 16:00