百度地图点击标记后如何获取自定义数据?
我在用百度地图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关联起来?
BMap.Marker对象添加自定义属性,因为百度地图内部对这些对象做了处理,有时候会丢失自定义属性。常见的解决方案是用一个单独的对象来维护 marker 和它的业务数据之间的关系。比如这样:
记得在移除标记的时候也要清理对应的
markersData数据,不然内存会泄露。这种做法虽然有点麻烦,但确实能解决这个问题,我也在好几个项目里用过这个方法。顺便说下,这种关联方式虽然有点土,但比直接挂属性要靠谱得多,毕竟跟官方的API机制更兼容一些。折腾了半天才找到这个办法,希望能帮到你。