就是这样,我想在标记上创建一个onclick事件,我正在使用angular-openlayers-directive。
到目前为止,我已经能够显示一些标记,但是单击事件之后我无法获取它们。
我想使用这些标记自定义属性(例如名称,备注等)执行一些操作。但是,使用openlayers 3似乎很难做到这一点。
<openlayers ol-center="ven" height="100vh">
<ol-layer ol-layer-properties="wms">
<ol-marker ng-repeat="marker in markers"
lat="marker.lat"
lon="marker.lon"
></ol-marker>
</ol-layer>
</openlayers>
因此,如何处理这些标记的onclick事件并获取其所有信息,或对javascript对象“标记”本身的引用。
最佳答案
我不确定您是否要单击弹出框或标记本身。下面有两个说明。使用底部的Plunker链接查看两个选项的有效演示。
要注册,请单击标记弹出框:
如果看一下指令,您会发现标记模板使用ng-transclude,因此您可以执行以下操作:
标记:
<ol-marker ol-marker-properties="santiago" >
<p ng-click="showDetails(santiago)">Santiago de Compostela</p>
</ol-marker>
在您的控制器中:
$scope.showDetails = function(id) {
alert('lat: '+ id.lat+', '+'lon: '+id.lon);
};
在这里,我将标记对象传递给showDetails函数。当您在Plunker演示中单击Santiago de Compostela的弹出标签时,您将在警报中看到相应的经/纬度。
要注册,请单击标记:
您可以将onClick属性添加到标记对象,如下所示:
在您的控制器中:
finisterre: {
lat: 42.907800500000000000,
lon: -9.265031499999964000,
label: {
show: false,
},
onClick: function (event, properties) {
console.log(properties);
alert('lat: '+ properties.lat+', '+'lon: '+properties.lon);
}
}
单击“ Plunker演示”中与finisterre相关的标记时,您将在警报中看到相应的经度/纬度。
注意:
在以下情况下,我只能使其工作:
标记对象必须具有定义的label属性
标签的show属性必须设置为false。
ol-marker html元素必须包含一些已包含的内容,或者必须在标记标签对象中设置message属性。
我可以使用CSS来防止弹出窗口显示出来,就像在演示中看到的那样,但是似乎有点不客气。如果您还希望在单击时显示弹出窗口,那么您已经准备就绪,只需删除我添加的css
hidden
类,然后添加弹出窗口html。Plunker Demo