如何为谷歌地图Polygon的addEventListener监听函数传递除event外的额外参数
解决方案
以下是两种可直接落地的实现方式:
方案1:使用匿名函数包装回调(最直观)
直接在事件绑定处用匿名函数接收原生event参数,再把自定义业务参数一起传给处理函数即可,代码修改如下:
var bermudaTriangle = new google.maps.Polygon({ paths: triangleCoords, strokeColor: "#fd7e14", strokeOpacity: 0.8, strokeWeight: 3, fillColor: "rgba(253,126,20,0.62)", fillOpacity: 0.35 }); bermudaTriangle.setMap(map); area_info = {"name" : "1", "shipping_cost" : 100} infoWindow = new google.maps.InfoWindow(); // 核心修改:用匿名函数承接原生event,同时传入自定义参数 bermudaTriangle.addListener("click", function(event) { showArrays(event, area_info); }); function showArrays(event, area) { let contentString = '<div class="form-group pr-2 pl-2">' + '<div class="text-dark">name:</div>' + area.name + '<br>'+ '<div class="text-dark">shipping_cost :</div>' + area.shipping_cost + '$'+ '<br></div>' ; infoWindow.setContent(contentString); infoWindow.setPosition(event.latLng); infoWindow.open(map); }
方案2:给Polygon实例挂载自定义属性(适合批量生成多个图形的场景)
你之前的思路是可行的,只是取值逻辑写错了:你把业务参数挂载到了实例的area属性下,但取值时没有先取area属性,直接取了name和shipping_cost所以拿不到值,修改如下:
var bermudaTriangle = new google.maps.Polygon({ paths: triangleCoords, strokeColor: "#fd7e14", strokeOpacity: 0.8, strokeWeight: 3, fillColor: "rgba(253,126,20,0.62)", fillOpacity: 0.35 }); bermudaTriangle.setMap(map); area_info = {"name" : "1", "shipping_cost" : 100} infoWindow = new google.maps.InfoWindow(); // 给实例挂载自定义属性 bermudaTriangle.area = area_info; bermudaTriangle.addListener("click", showArrays); function showArrays(event) { // 核心修改:先取挂载的area属性,再读取内部字段,也可以用event.currentTarget.area取值 const area = this.area; let contentString = '<div class="form-group pr-2 pl-2">' + '<div class="text-dark">name:</div>' + area.name + '<br>'+ '<div class="text-dark">shipping_cost :</div>' + area.shipping_cost + '$'+ '<br></div>' ; infoWindow.setContent(contentString); infoWindow.setPosition(event.latLng); infoWindow.open(map); }
内容的提问来源于stack exchange,提问作者Negar Javadzadeh
相关产品推荐
相关产品推荐

