我正在使用MeteorJS 1.4.4.2 + ReactJS构建交通堵塞应用程序。我使用大气谷歌地图包之前和2流行的谷歌地图npm包(istarkov和tomchentw),这些包工作正常,但它没有我想要的,所以相反,我直接使用谷歌地图api,以获得它的完整功能
我希望能够在地图上删除所选标记
学尝试:
// Map functions in the same file as mapInit function
let addMarker = ( location )=> {
let marker = new google.maps.Marker({
position: location,
map: map,
animation: google.maps.Animation.DROP,
draggable: true
}).addListener( 'click', ( e )=> removeMarkerOnClick( e ) );
markers.push( marker );
};
let removeMarkerOnClick( marker )=> {
let lat = marker.latLng.lat (),
lng = marker.latLng.ln (),
position = {};
markers = markers.reduce(( new_markers, marker )=> {
position = marker.f.position;
position.lat() !== lat && position.lng() !== lng ?
new_markers.push( marker ) : marker.setMap( null );
return new_markers;
}, markers);
}
window.initMap = () => {
//.... body hidden
map.addListener( 'click', ( e )=> addMarker( e.latLng ) );
}
来自客户端控制台的错误:
Uncaught TypeError:
MapFunctions.jsx:74
marker.setMap is not a function
at http://localhost:3000/app/app.js?hash=1f01aac45aac6af0dd009bc4623183b2511f62bf:419:20
at Array.reduce (native)
at removeMarkerOnClick (http://localhost:3000/app/app.js?hash=1f01aac45aac6af0dd009bc4623183b2511f62bf:413:23)
at _.Ge.<anonymous> (http://localhost:3000/app/app.js?hash=1f01aac45aac6af0dd009bc4623183b2511f62bf:403:16)
at Object._.z.trigger (https://maps.googleapis.com/maps/api/js?key=AIzaSyB1-fwP96l-_VAicaDGRNMmEU93TY4fcGs&libraries=places&callback=initMap:102:121)
at XT.<anonymous> (https://maps.googleapis.com/maps-api-v3/api/js/28/14/marker.js:19:348)
at _.pG._.z.trigger (https://maps.googleapis.com/maps/api/js?key=AIzaSyB1-fwP96l-_VAicaDGRNMmEU93TY4fcGs&libraries=places&callback=initMap:102:121)
at _.pG.onclick (https://maps.googleapis.com/maps/api/js?key=AIzaSyB1-fwP96l-_VAicaDGRNMmEU93TY4fcGs&libraries=places&callback=initMap:40:81)
at _.Bu._.z.trigger (https://maps.googleapis.com/maps/api/js?key=AIzaSyB1-fwP96l-_VAicaDGRNMmEU93TY4fcGs&libraries=places&callback=initMap:102:121)
at _.Bu.<anonymous> (https://maps.googleapis.com/maps/api/js?key=AIzaSyB1-fwP96l-_VAicaDGRNMmEU93TY4fcGs&libraries=places&callback=initMap:40:81)
解决方案尝试:
使用setOnMap(null)也行不通,同样的TypeError,setOnMap()不是函数
使用marker.setVisibility(false)也不起作用,同样的TypeError,...不是函数
我在Google周围搜索了一个半小时但还没有找到任何内容,所以请帮助并非常感谢您花时间阅读本文。
答案 0 :(得分:0)
您正在函数调用中传递事件。
}).addListener( 'click', ( e )=> removeMarkerOnClick( e ) );
you should do:
}).addListener( 'click', ( e )=> removeMarkerOnClick( marker ) );
答案 1 :(得分:0)
如果有人试图找到解决方法,请不要打扰。 当我尝试搜索Marker对象时,我尝试使用标记的其他示例,控制台记录标记对象以检查差异,然后我发现我的标记对象位于另一个顶级对象中,因此为了访问setMap功能,我必须去一个较低的水平。 的解决方案:强>
let removeMarkerOnClick( marker )=> {
let lat = marker.latLng.lat (),
lng = marker.latLng.ln (),
position = {};
markers = markers.reduce(( new_markers, marker )=> {
position = marker.f.position;
position.lat() !== lat && position.lng() !== lng ?
new_markers.push( marker ) : marker.f.setMap ( null ); // Change this line from marker.setMap( null ) to marker.f.setMap ( null )
return new_markers;
}, markers);
}