By and large, unless you are using two-way binding,
you should be able to re-use the code you wrote for Vue 1.x.
The main exceptions is markers' click events triggering info windows.

In general,
the move away from two-way bindings is a good thing, as Google Maps is usually
unable to fully honour your positioning / centering / bounds requests. This means that
usually, `mapInstance.center` (vue-google-maps property) and
`mapInstance.$mapObject.getCenter()`
(Google Maps API method) were be returning different values, and some
hackery was needed to avoid endless update loops.

# Important changes

1. (v0.4.0) The installation method for vue2-google-maps has changed.
You use the library by calling:

```js
// If you use Webpack + vue-loader
var VueGoogleMaps = require('vue2-google-maps')
// If you are not using Webpack
var VueGoogleMaps = require('vue2-google-maps/dist/vue-google-maps')

Vue.use(VueGoogleMaps, {
  load: { /* load options */ }
})
```

The reason for this is to allow developers to choose between
[different versions of the Vue library](https://vuejs.org/v2/guide/installation.html#Standalone).

2. You might have noticed that there are two ways to include
the library. However there is be no functional difference
between the two include syntaxes if you are using Webpack:
```js
// Option A: If you use Webpack + vue-loader
var VueGoogleMaps = require('vue2-google-maps')
// Option B: If you are not using Webpack
var VueGoogleMaps = require('vue2-google-maps/dist/vue2-google-maps')
```

The only difference is that Option A probably saves you a several
lines of code because your project will not have to load multiple
versions of packages like `style-loader` and the babel runtime.

3. Clicking on a marker will no longer trigger its associated InfoWindow. This
  is necessary since two-way binding is not allowed, the marker is
  unable to modify the InfoWindow's opened property.

4. Two-way binding is no longer supported in Vue 2.x. If you need to listen on
    changes, e.g. `zoom_changed`, use the `zoom_changed` event. Contrary
    to the Google Maps reference, for `*_changed` events with obvious `get*`/
    `set*` counterparts, the event handler will automatically fetch the new
    data for you.

For example, using the Maps API:
```js
gmap.addListener('zoom', (value) => {
  console.log(value === undefined); // true. Value is not available from argument
  var zoom = gmap.getZoom();
})
```

However, in `vue-google-maps` we provide the zoom value in the argument for
convenience:
```js
gmap.$on('zoom_changed', (zoom) => {
  console.log(zoom === gmap.$mapObject.getZoom()); // true
})
```

Thus if you really need two-way binding, you could write:
```html
<gmap-map :zoom="zoom" @zoom_changed="updateZoom($event)"></gmap-map>
```

5. Map elements no longer have to descend from MapComponent. Instead they only
need to mix in MapElementMixin. Thus you are free to use your own component hierarchy.
6. vue-google-maps for Vue 1.x automatically converted between google.maps.LatLng and
  plain-old-data (POD) {lat, lng} objects for two-way binding. In this version, the conversion does
  not take place. You will get a `google.maps.LatLng` object, e.g. in `center_changed`
  events.