2016-06-21 8 views
1

私は、uiリーフレットプラグインの円マーカーに問題があります。これまでにサークルをクリックするとポップアップが表示されますが、地図の円の外をクリックしてサークルをもう一度クリックするとポップアップが表示されません。円マークでポップアップが正しく機能しない

問題の原因を教えてください。このための回避策はありますか?が

  • その後、他のマーカーをクリックしてみてくださいポップアップが
  • 場合には表示されませんマップで

    1. を再現する

      階段クリック1円マーカー

    2. は、マップの範囲外の円マーカーを移動します円の外をクリックしてサークルを再びクリックしたときに再びポップアップが表示されます

    以下は、cのスニペットです頌歌あなたは完全なコードが必要な場合は、このgithubのリンクをご覧ください

    https://github.com/Umamaheswaran1990/learningleaflet

    enter image description here

    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 
           }; 
          } 
         }); 
        } 
    }]); 
    
  • +0

    両方のブラウザで試しましたか?私は問題は両方のブラウザに残っているのですか? –

    +0

    @pdfarhad私はクロムとforefoxの両方で問題を再現できますが、驚くことに、これはEdgeブラウザで動作します – Umamaheswaran

    答えて

    0

    私はそれが

    を追加することで動作するようになりました
    event-broadcast="events" 
    
    のindex.htmlでリーフレット要素に

    、およびUI-リーフレットイベントの例があること言うように、これは必要だった理由を

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

    は、私はよく分からない

    app.jsする追加すべてのブロードキャストイベントはデフォルトで有効になっています。 http://angular-ui.github.io/ui-leaflet/examples/0000-viewer.html#/basic/events-example

    +0

    ありがとう!!それを試してみて、それを回答としましょう – Umamaheswaran

    関連する問題