DevExtreme React - Add and Remove
To add markers at design-time, pass an array of objects to the markers option. A marker requires only its location to be specified.
jQuery
$(function() {
$("#mapContainer").dxMap({
zoom: 5,
markers: [
{ location: "40.749825, -73.090443" },
{ location: "42.743244, -71.594375" },
{ location: "37.058435, -74.903842" }
]
});
});Angular
<dx-map
[zoom]="5"
[markers]="mapMarkers">
</dx-map>
import { DxMapModule } from "devextreme-angular";
// ...
export class AppComponent {
mapMarkers = [
{ location: "40.749825, -73.090443" },
{ location: "42.743244, -71.594375" },
{ location: "37.058435, -74.903842" }
];
}
@NgModule({
imports: [
// ...
DxMapModule
],
// ...
})To add or remove a marker at runtime, call the addMarker(markerOptions) or removeMarker(marker) method.
var markersCollection = [
{ location: "40.749825, -73.090443" },
{ location: "42.743244, -71.594375", tooltip: { isShown: true } }
];
// Adds a marker
map.addMarker(markersCollection[0]);
// Adds several markers
map.addMarker(markersCollection);
// Removes the marker with specific configuration
map.removeMarker(markersCollection[1]);
// Removes the marker with index 2 in the "markers" array
map.removeMarker(2);
// Removes the markers with specific configurations
map.removeMarker(markersCollection);
// Removes the markers with indexes 0 and 4 in the "markers" array
map.removeMarker([0, 4]);In the following code, a marker is added each time a user clicks someplace on the Map. The last marker from the markers array is removed when the user clicks the Button under the Map.
$(function() {
var map = $("#mapContainer").dxMap({
center: { lat: 40.749825, lng: -73.987963 },
zoom: 10,
onClick: function (e) {
e.component.addMarker({
// Location of the clicked point on the map
location: e.location
});
}
}).dxMap("instance");
$("#removeMarker").dxButton({
text: "Remove the Last Marker",
onClick: function () {
var markers = map.option("markers");
var markerCount = markers.length;
if (markerCount < 1)
return;
// Removes the last marker
map.removeMarker(markers[markerCount - 1]);
}
});
});With Angular, AngularJS, or Knockout, use a different technique. Bind the markers option of the Map widget to a component property (in Angular), a scope property (in AngularJS) or an observable array (in Knockout).
Angular
<dx-map
[zoom]="10"
[markers]="mapMarkers"
(onClick)="addMarker($event)">
</dx-map>
<dx-button
text="Remove the Last Marker"
(onClick)="removeMarker()">
</dx-button>
import { DxMapModule, DxButtonModule } from "devextreme-angular";
// ...
export class AppComponent {
mapMarkers = [
{ location: "40.749825, -73.090443" },
{ location: "42.743244, -71.594375" }
];
addMarker (e) {
this.mapMarkers.push({ location: e.location });
};
removeMarker () {
this.mapMarkers.pop();
}
}
@NgModule({
imports: [
// ...
DxMapModule,
DxButtonModule
],
// ...
})AngularJS
<div ng-controller="DemoController">
<div dx-map="{
zoom: 10,
onClick: addMarker,
bindingOptions: {
markers: 'mapMarkers'
}
}"></div>
<div dx-button="{
text: 'Remove the Last Marker',
onClick: removeMarker
}"></div>
</div>
angular.module('DemoApp', ['dx'])
.controller('DemoController', function DemoController($scope) {
$scope.mapMarkers = [
{ location: "40.749825, -73.090443" },
{ location: "42.743244, -71.594375" }
];
$scope.addMarker = function (e) {
$scope.mapMarkers.push({ location: e.location });
}
$scope.removeMarker = function () {
$scope.mapMarkers.pop();
};
});Knockout
<div data-bind="dxMap: {
zoom: 10,
onClick: addMarker,
markers: mapMarkers
}"></div>
<div data-bind="dxButton: {
text: 'Remove the Last Marker',
onClick: removeMarker
}"></div>
var viewModel = {
mapMarkers: ko.observableArray([
{ location: "40.749825, -73.090443" },
{ location: "42.743244, -71.594375" }
]),
addMarker: function (e) {
viewModel.mapMarkers.push({ location: e.location });
},
removeMarker: function () {
viewModel.mapMarkers.pop();
}
};
ko.applyBindings(viewModel);See Also
If you have technical questions, please create a support ticket in the DevExpress Support Center.