【问题标题】:Popups not working properly with circle marker弹出窗口无法使用圆形标记正常工作
【发布时间】:2016-06-21 13:44:31
【问题描述】:

我遇到了 ui 传单插件中的圆形标记问题。当有人点击一个圆圈时,我会弹出弹出窗口,但是如果我在地图中的圆圈之外点击,然后再次尝试点击圆圈,则弹出窗口不会出现。

您能否建议可能是什么问题?有什么解决方法吗?

复制步骤

  1. 在地图中单击一个圆形标记
  2. 将圆形标记移出地图范围
  3. 然后尝试单击不会出现弹出窗口的任何其他标记
  4. 如果我在圆圈外单击并再次单击圆圈,则会再次出现弹出窗口

下面是sn-p代码,如果需要完整代码请访问这个github链接

https://github.com/Umamaheswaran1990/learningleaflet

HTML

<!DOCTYPE html>
<html ng-app="demoapp">
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="../bower_components/angular/angular.min.js"></script>
    <script src="../bower_components/leaflet/dist/leaflet.js"></script>
    <script src="../bower_components/angular-simple-logger/dist/angular-simple-logger.js"></script>
    <script src="../bower_components/ui-leaflet/dist/ui-leaflet.min.js"></script>
    <link rel="stylesheet" href="../bower_components/leaflet/dist/leaflet.css" />
    <script src="app.js"></script>
</head>
<body ng-controller="LayersSimpleController as vm">
    <leaflet center="center" tiles="tiles" paths="paths" width="50%" height="480px"></leaflet>
</body>
</html>

JS

var app = angular.module("demoapp", ['ui-leaflet']);
app.controller("LayersSimpleController", ["$scope", function ($scope) {
    var vm = this;

    $scope.$on('leafletDirectiveMap.map.load', function (event, data) {
        var map = data.leafletObject;
        map.attributionControl.setPrefix(false);
    });

    $scope.$on('leafletDirectiveMap.moveend', function (event, data) {
        activate();
    });

    var map = [
        { "lat": 30.7559, "lon": -96.489 },
        { "lat": 41.8887, "lon": -111.769 }];

    angular.extend($scope, {
        center: {
            lat: 39.774769,
            lng: -98.789062,
            zoom: 4,
            minZoom: 4,
            zoomControl: true,
        },
        events: {},
        tiles: {
            url: 'http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',
            options: {
                subdomains: ['otile1', 'otile2', 'otile3', 'otile4']
            },
            layers: {},
            defaults: {

            }
        }
    });

    activate();

    function activate() {
        $scope.paths = {};
        angular.forEach(map, function (value, key) {
            if (value.lat !== null && value.lon !== null) {
                $scope.paths['circle' + key] = {
                    type: 'circleMarker',
                    className: 'testClass',
                    fillColor: 'DarkSlateGray',
                    color: '#000000',
                    weight: 0,
                    opacity: 1,
                    message: 'This is a test marker',
                    fillOpacity: 0.8,
                    stroke: false,
                    clickable: true,
                    latlngs: [parseFloat(value.lat), parseFloat(value.lon)],
                    radius: 20
                };
            }
        });
    }
}]);

【问题讨论】:

  • 两种浏览器都试过了吗?我的意思是这两个浏览器都存在问题吗?
  • @pdfarhad 我能够在 chrome 和 forefox 中重现这个问题,令人惊讶的是这在 Edge 浏览器中有效

标签: angularjs leaflet angular-leaflet-directive ui-leaflet


【解决方案1】:

我通过添加来让它工作

event-broadcast="events"

到 index.html 中的传单元素,并添加

 events: {
          path: {
                 enable: ['click']
                 }
         },

到 app.js

我不知道为什么这是必要的,因为 ui-leaflet 事件示例表明所有广播事件都默认启用。 http://angular-ui.github.io/ui-leaflet/examples/0000-viewer.html#/basic/events-example

【讨论】:

    猜你喜欢
    • 2020-02-15
    • 1970-01-01
    • 2013-07-07
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多