更改标记图标和弹出消息关闭

时间:2016-02-11 17:57:34

标签: angularjs leaflet angular-leaflet-directive

我使用的是leaflet.awesome-markers卡片标记。当您更改图标的颜色时,它会立即关闭弹出消息。

是否可以在不关闭弹出窗口的情况下更改颜色?

$scope.$on('leafletDirectiveMarker.viewMap.click', function(e, args){
    $scope.selectedPoint = $scope.points.filter( function(spoint){ return spoint._id ===  args.modelName; })[0];
    $scope.waypoints[$scope.selectedPoint._id].icon.markerColor = 'green'; 
});

2 个答案:

答案 0 :(得分:1)

改为使用L.Marker.setIcon(),并停止传播事件,最好是L.DomEvent.stop(),因为它会阻止$sArticle}事件从标记传播到地图(通过任何click如果有的话。)

在简单的Javascript(无角度)中,这将是:

L.LayerGroups

答案 1 :(得分:0)

对于我自己,我解决了这样的问题 - 必要时添加和显示弹出窗口,而不使用标准机制角度(为消息标记指定)。 您当然可以在加载数据时立即初始化弹出消息,但在我的项目中,它更容易按需实现。

//popup's store
$scope.popups = {};

$scope._setViewMarker = function(pId, showPopup){
var wp = $scope.waypoints;
wp[pId].icon.markerColor = 'red';

//set unselected markers color
for (var i in wp)
    if(i != pId){
        wp[i].icon.markerColor = 'blue';
    };  
// close other popups
for (var i in $scope.popups)
    if(i != pId)
        $scope.map.closePopup($scope.popups[i]);        
// show or create poupap
if(showPopup)
    if($scope.popups[pId] ){
        if(!$scope.popups[pId]._isOpen)
            $scope.map.openPopup($scope.popups[pId]);
    } else {
        var ind = $scope.points.map(function(e) { return e._id; }).indexOf(pId);   
        var c = angular.element('<popup point="points['+ind+']" note-click="showDetailPoint(points['+ind+'])"></popup>');
        var linkFn = $compile(c);
        var element = linkFn($scope);
        $scope.popups[pId] = L.popup({offset:[0, -30]}).setLatLng( [wp[pId].lat, wp[pId].lng] ).setContent(element[0]).openOn($scope.map);
        $scope.popups[pId].pointId = pId;
    };
};    
$scope.$on('leafletDirectiveMarker.viewMap.click', function(e, args){
    $scope._setViewMarker(args.modelName, true);
});