hero

VMapbox

Combine powers of Mapbox GL JS and Vue.js

Get Started →

Declarative style

You can use map elements like layers, markers, popups as Vue components and control them via synchronized props

Vuefied

Map elements declared as components respect Vue lifecycle, emit map events like Vue events and can be used in OOP-style

Promisified async actions

You can do async map operations and get results in Promise without messing with map events and figuring out what action cause it

If you like a long story, check out blog post (opens new window)

<template>
  <MglMap
    container="map-test"
    :center.sync="center"
    :accessToken="accessToken"
    :mapStyle="mapStyle"
  >
    <MglMarker
      :coordinates.sync="markerCoordinates"
      color='green'
    />
    <MglGeojsonLayer
      type="fill"
      :sourceId="sourceId"
      :layerId="layerId"
      :source="geojson"
      @click="handleClick"
    />
  </MglMap>
</template>

<script>
import {
  MglMap,
  MglMarker,
  MglGeojsonLayer
} from 'v-mapbox'

export default {
  name: 'App',
  data() {
    return {
      accessToken: 'some_token',
      mapStyle: 'mapbox://map_style',
      geojson: { /* … some geojson */},
      layerId: 'firstLayer',
      sourceId: 'firstSource',
      markerCoordinates: [50, 50]
    };
  },
  methods: {
    handleClick() {
      console.log('clicked')
    }
  }
}
</script>

Size

~ 15 kB minified and gzipped