1

次のセットアップは正常に機能していますが、いくつかの小さな問題が発生しました..多くの方法を試しましたが、新しいマーカーを追加する前にマーカーを削除できません..

次の例では、コントローラーからプッシュするたびにマーカーが追加され続けます..新しいマーカーを追加する前に既存のマーカーを消去する最良の方法は何ですか...?

 var module = angular.module('Map', []);   
 module.directive('sap', function() {

    return {
        restrict: 'E',
        replace: true,
        template: '<div></div>',
        link: function(scope, element, attrs) {
            var map = L.map(attrs.id, {
                center: [-35.123, 170.123],
                zoom: 14
            });
            //create a CloudMade tile layer and add it to the map
            L.tileLayer('http://{s}.tile.cloudmade.com/57cbb6ca8cac418dbb1a402586df4528/997/256/{z}/{x}/{y}.png', {
                maxZoom: 18
            }).addTo(map);

            //add markers dynamically
            var points = [];
            updatePoints(points);

       function updatePoints(pts) {

                for (var p in pts) {

                    L.marker([pts[p].lat, pts[p].long]).addTo(map).bindPopup(pts[p].message);
                }

            }


            scope.$watch(attrs.pointsource, function(value) {
                updatePoints(value);
            });

        }


    };
});

コントローラー内で、新しいマーカーを追加する方法は次のとおりです。

          $scope.pointsFromController.push({
                lat: val.geoLat,
                long: val.geoLong
            });

HTML のコードは単純です

<sap id="map" pointsource="pointsFromController"></sap>
4

2 に答える 2

5

チラシ作成者はこちら。マーカーをクリアする最良の方法は、(マップに直接追加するのではなく)マーカーをグループに追加し、必要に応じてgroup.clearLayers()を呼び出すことです。http://leafletjs.com/examples/layers-control.html

于 2012-11-09T18:02:39.713 に答える
1

pointsFromController単純な JavaScript 配列であると仮定します。行ったプッシュを簡単に元に戻すことができます。

$scope.removePoints = function() {
  for (var i=$scope.pointsFromController.length; i>=0; i--)
    $scope.pointsFromController.pop();
};
于 2012-11-07T03:12:34.637 に答える