2013-02-18 83 views
5

我使用AngularUI谷歌地图指示这样:AngularUI - 谷歌地图 - 删除标记

UpdateData.html

<div ng-repeat="marker in myMarkers" ui-map-marker="myMarkers[$index]"></div> 

<div class="control-group"> 
    <label class="control-label">Situación</label> 
    <div class="controls"> 
     <div id="map_canvas" ui-map="model.myMap" class="map" ui-event="{'map-click': 'addMarker($event)'}" ui-options="mapOptions"></div> 
    </div> 
</div> 

UpdateController

if (!$scope.myMarkers) { 
    $scope.myMarkers = []; 
} 

if (!$scope.myMap) { 
    $scope.model = { 
     myMap: undefined 
    }; 
} 

$scope.mapOptions = { 
    center : new google.maps.LatLng(35.784, -78.670), 
    zoom : 15, 
    mapTypeId : google.maps.MapTypeId.ROADMAP 
}; 

$scope.addMarker = function($event) { 
    $scope.myMarkers.push(new google.maps.Marker({ 
     map : $scope.model.myMap, 
     position : $event.latLng 
    })); 

    $scope.event.lat = $event.latLng.lat(); 
    $scope.event.lng = $event.latLng.lng(); 
}; 

我可以添加新的标记和地图更新成功,我无法删除它们。我做的是以下内容:

$scope.myMarkers.splice(0, $scope.myMarkers.length); 

myMarkers数组变为空,但地图仍包含已删除的标记。当将新标记推向myMarkers数组时,似乎myMarkers数组和地图是同步的,但当myMarkers数组被清除时没有同步。

回答

7

尝试myMarker.setMap(null)

您仍然必须使用Google地图API来完成所有工作,但并不涉及太多的魔法。 ui-map-marker是一个指令的唯一原因是您可以轻松地将DOM事件挂接到您的标记上

5

我回答自己。执行这条线

$scope.myMarkers.splice(0, $scope.myMarkers.length); 

这应该是做之前:

angular.forEach($scope.myMarkers, function(marker) { 
    marker.setMap(null); 
}); 
+0

你好,我有同样的问题,并没有适合我,因为我不是'使用新google.maps.Marker ({0}}}添加一个标记,而是一个自定义函数来添加具有自定义图标和信息的标记。 你有一个想法如何处理这个? – Ayyoub 2015-06-08 12:49:10