5

我以这种方式使用 AngularUI Google Maps 指令:

更新数据.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>

更新控制器

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

4

2 回答 2

8

试试myMarker.setMap(null)

您仍然必须使用 Google Maps API 来完成所有操作,这并不涉及太多魔法。唯一的原因ui-map-marker是指令是为了让您可以轻松地将 DOM 事件连接到您的标记

于 2013-02-18T17:15:29.533 回答
7

我回答自己。在执行此行之前

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

应该这样做:

angular.forEach($scope.myMarkers, function(marker) {
    marker.setMap(null);
});
于 2013-02-18T18:18:06.777 回答