我使用的是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';
});
答案 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);
});