就是这样,我想在标记上创建一个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

09-30 13:34
查看更多